我尝试通过Python 2.6中的子进程模块调用一个shellcript。
import subprocess
shellFile = open("linksNetCdf.txt", "r")
for row in shellFile:
subprocess.call([str(row)])
我的文件名长度介于400到430个字符之间。 调用脚本时,我收到错误:
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
任何想法如何仍然运行脚本?
答案 0 :(得分:15)
subprocess.call
可以使命令以两种方式运行 - 或者像键入shell一样的单个字符串,或者是可执行名称后跟参数的列表。
你想要第一个,但是正在使用第二个
import subprocess
shellFile = open("linksNetCdf.txt", "r")
for row in shellFile:
subprocess.call(row, shell=True)
通过将row
转换为包含单个字符串的列表,您可以说“运行名为echo these were supposed to be arguments
的命令,不带参数”
答案 1 :(得分:8)
您需要告诉子进程执行该行作为包含参数的完整命令,而不仅仅是一个程序。
这是通过将shell = True传递给调用
来完成的 import subprocess
cmd = "ls " + "/tmp/ " * 30
subprocess.call(cmd, shell=True)