Can';t设法在Python中使用子流程模块(没有这样的文件)
我正试图在python代码中启动一个bash脚本。 假设包含bash脚本的文件名为“/home/myname/myfile.sh”,我尝试了:Can';t设法在Python中使用子流程模块(没有这样的文件),python,bash,arguments,subprocess,Python,Bash,Arguments,Subprocess,我正试图在python代码中启动一个bash脚本。 假设包含bash脚本的文件名为“/home/myname/myfile.sh”,我尝试了: import subprocess subprocess.call(['/home/myname/myfile.sh']) 但我得到: Traceback (most recent call last): File "run_splitseq.py", line 21, in <module> subprocess.call([
import subprocess
subprocess.call(['/home/myname/myfile.sh'])
但我得到:
Traceback (most recent call last):
File "run_splitseq.py", line 21, in <module>
subprocess.call(["/home/myname/myfile.sh"])
File "/home/myname/.pythonbrew/pythons/Python-2.6.5/lib/python2.6/subprocess.py", line 480, in call
return Popen(*popenargs, **kwargs).wait()
File "/home/myname/.pythonbrew/pythons/Python-2.6.5/lib/python2.6/subprocess.py", line 633, in __init__
errread, errwrite)
File "/home/myname/.pythonbrew/pythons/Python-2.6.5/lib/python2.6/subprocess.py", line 1139, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我得到:
/bin/sh: 1: /home/myname/myfile.sh: not found
此外,我还想提出论点,在网上搜索我发现的方法:
subprocess.call(['/home/myname/myfile.sh', arg1], shell=True)
但自从我得到:
arg1: 1: arg1: /home/myname/myfile.sh: not found
谁能帮帮我吗?:) 确保脚本:
另外,请确保在Python脚本中引用脚本时没有使用tilda
~
。我不确定是什么原因导致了您的问题。但我看到了一些我关心的事情:
subprocess.call()
,您应该给出一个字符串列表,第一个是可执行文件的路径,其余是单个参数;然后应该使用shell=False
(或者省略它,因为这是默认值)。或者传递shell=True
,那么应该只传递一个字符串(而不是字符串列表!),该字符串将由shell解释和拆分,因此它应该包含可执行文件的路径和所有参数(如果需要,以引用的版本)
所以它不是
subprocess.call(['/path/to/executable',arg1',arg2'])#shell=False
或
subprocess.call('/path/to/executable“arg1”“arg2”,shell=True)
未找到
a。指定可执行文件路径的错误方法(shell=True
,例如,使用字符串列表;没有尝试)
b。可执行文件本身不存在(但您检查了您所说的)
c。可执行文件不是可执行文件(缺少权限位)
d。可执行文件在其第一行中指定一个不存在的解释器(使用#!
)(例如#!/bin/sh
或类似的解释器)其中任何一项适用吗?您能显示项目的文件夹结构吗?
ls-l/home/myname/myfile.sh的输出是什么?
?谢谢您的回复1。是的,它存在,我已经检查过好几次了。。。这就是为什么我真的不理解错误消息2。我可以在不使用Python的情况下启动该脚本,因此它是可执行的(不确定我对您的问题的回答是否正确)。最后,不,我没有在Python脚本中编写~并且我的脚本结尾没有~谢谢您的帮助!我没有注意到shell=True语法和另一个语法之间的区别,我认为它现在可以正常工作了。。。非常感谢你!!!请注意:我还在命令行前面添加了“sh”,这样子进程.call('sh/home/myname/myfile.sh“arg1”“arg2”“,shell=True)再次感谢:)arg1和arg2中都有变量,所以真正的语法最后是:subprocess.call('sh/home/myname/myfile.sh'+''+arg1+''+arg2,shell=True)考虑使用<代码>子进程。调用('sH/home /MyNAM/MyFiel.S%S%S' %(ARG1,ARG2),Shell=TRUE)< /代码>:BTW,请自由地支持帮助你的答案,如果你觉得一个解决了你的问题,你应该接受它。谢谢你的提示!(是的,这正是我在回复你之后想要做的,但我不能这么做,因为名誉或其他原因:/)
arg1: 1: arg1: /home/myname/myfile.sh: not found