Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t设法在Python中使用子流程模块(没有这样的文件)_Python_Bash_Arguments_Subprocess - Fatal编程技术网

Can';t设法在Python中使用子流程模块(没有这样的文件)

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([

我正试图在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(["/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