2010-01-14 4 views
0

La déclaration suivante fonctionne comme prévu:subprocess popen + papillotes + données binaires

os.system("curl --data-binary \@"+input_file_path+" -o "+ file_name +" localhost:30") 

Mais en essayant avec subprocess.popen:

Popen(['curl','--data-binary','\@'+input_file_path, '-o', file_name,'localhost:30'], stdout=PIPE).communicate()[0] 

Curl semble raccrocher (grumes en boucle sans fin), comme si le fichier d'entrée ne lui est pas passé (ce qui est obligatoire pour localhost: 30 pour fonctionner correctement) ...

Des idées?

Répondre

2

Vous pouvez essayer d'utiliser la chaîne d'origine dans subprocess.Popen avec l'argument mot-clé supplémentaire pour Popen de shell=True:

subprocess.Popen("curl --data-binary \@"+input_file_path+" -o "+ file_name +" localhost:30", 
    stdout=subprocess.PIPE, 
    shell=True) 
3

que diriez-vous using a library au lieu d'appeler la boucle du système?

+0

Parce que parfois vous ne voulez pas attendre une réponse ou attendre du tout, il suffit de détacher la fourche et d'oublier. Comme lors de la connexion. – rapadura

+0

Une autre bonne bibliothèque http python est la bibliothèque '[requests] (http://docs.python-requests.org/fr/master/)' – Mercury