Sous-processus en Python: Nom de Fichier trop long
J'essaie d'appeler un shell script via le sous-processus module en Python 2.6.
import subprocess
shellFile = open("linksNetCdf.txt", "r")
for row in shellFile:
subprocess.call([str(row)])
Mes noms de fichiers ont une longueur variant entre 400 et 430 caractères.
Lors de l'appel du script j'obtiens l'erreur:
File "/usr/lib64/python2.6/subprocess.py", line 444, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib64/python2.6/subprocess.py", line 595, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1106, in _execute_child
raise child_exception
OSError: [Errno 36] File name too long
Un exemple de lignes à l'intérieur d' linksNetCdf.txt
est
./ShellScript 'Title' 'Sometehing else' 'InfoInfo' 'MoreInformation' inputfiile outputfile.txt 3 2
Toute idées sur la façon de toujours exécuter le script?
Ont u essayé de comprendre quelle est la longueur maximale autorisée pour un nom de fichier est réglé sur votre système
L'écran peut afficher un
il fonctionne lorsque je tape "manuellement" ou de copier le lien de la .txt. et le coller dans le ssh secure client...
non, il n'a pas de chef dans le .txt, tout le ./..sh ... commandes
non, il signifie l'exécution de la commande
getconf NAME_MAX /
L'écran peut afficher un
head
de linksNetCdf.txtil fonctionne lorsque je tape "manuellement" ou de copier le lien de la .txt. et le coller dans le ssh secure client...
non, il n'a pas de chef dans le .txt, tout le ./..sh ... commandes
non, il signifie l'exécution de la commande
head linksNetCdf.txt
, et de nous montrer les résultats...
OriginalL'auteur Stophface | 2015-04-20
Vous devez vous connecter pour publier un commentaire.
subprocess.call
peut prendre la commande à exécuter en deux façons - soit une seule chaîne de caractères comme vous le feriez pour taper dans un shell, ou une liste de l'exécutable de nom, suivis par les arguments.Vous souhaitez que la première, mais ont été à l'aide de la deuxième
Par la conversion de votre
row
dans une liste contenant une chaîne unique, vous êtes en train de dire quelque chose comme "Exécuter la commande nomméeecho these were supposed to be arguments
sans arguments"[]
mais j'obtiens toujours la même erreur...Il y a des paramètres dans ma commande je veux courir. José Ricardo Bustos M. mentionné que cela pourrait être problématique.
Cela prend en charge les paramètres de l'amende juste. Vous pouvez essayer d'utiliser
subprocess.call(row, shell=True)
Qui a fait le tour. Merci!
OriginalL'auteur Eric
Vous devez dire aux sous-processus pour exécuter la ligne de commande complète, y compris des arguments, et pas seulement un programme.
Cela se fait en passant shell=True pour appeler
OriginalL'auteur deets