Python中的子进程:文件名太长

时间:2015-04-20 11:50:50

标签: python shell

我尝试通过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

任何想法如何仍然运行脚本?

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)