Подпроцесс в Python: имя файла слишком длинное

Я пытаюсь вызвать shellscript через модуль подпроцесса в Python 2.6.

import subprocess
shellFile = open("linksNetCdf.txt", "r")
for row in shellFile:
 subprocess.call([str(row)])

Мои имена файлов имеют длину от 400 до 430 символов. При вызове script я получаю сообщение об ошибке:

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

Пример строк внутри linksNetCdf.txt равен

./ShellScript 'Title' 'Sometehing else' 'InfoInfo' 'MoreInformation' inputfiile outputfile.txt 3 2

Любые идеи о том, как еще запустить script?

2 ответа

subprocess.call может взять команду для запуска двумя способами: либо одну строку, как вы бы вставляете в оболочку, либо список исполняемого имени, за которым следуют аргументы.

Вы хотите первый, но использовали второй

import subprocess
shellFile = open("linksNetCdf.txt", "r")
for row in shellFile:
 subprocess.call(row, shell=True)

Преобразуя row в список, содержащий одну строку, вы говорите что-то вроде "Запустите команду с именем echo these were supposed to be arguments без аргументов"


Вам нужно указать подпроцесс, чтобы выполнить строку как полную команду, включая аргументы, а не одну программу.

Это делается путем передачи shell = True для вызова

import subprocess
 cmd = "ls " + "/tmp/ " * 30
 subprocess.call(cmd, shell=True)

licensed under cc by-sa 3.0 with attribution.