gpt4 book ai didi

python - 无法在Python中使用子流程模块(无此类文件)

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:19 25 4
gpt4 key购买 nike

我正在尝试在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


当我尝试:

subprocess.call(['/home/myname/myfile.sh'], shell=True)


我得到:

/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


谁能帮帮我吗 ? :)

最佳答案

我不确定是什么原因导致了您的问题。但是我看到了一些我担心的事情:


subprocess.call()中,您应该给出一个字符串列表,第一个是可执行文件的路径,其余的是单个参数;那么您应该使用shell=False(或忽略它,因为这是默认设置)。或者,您传递shell=True,则应仅传递一个字符串(而不是字符串列表!),该字符串将由外壳程序解释和拆分,因此它应包含可执行文件的路径和所有参数(在带引号的版本中,如有必要)。

所以要么

subprocess.call([ '/path/to/executable', 'arg1', 'arg2' ]) # shell=False

要么

subprocess.call('/path/to/executable "arg1" "arg2"', shell=True)
由于多种原因,可能会出现错误消息not found

一种。指定可执行文件路径的错误方法(例如,带有字符串列表的shell=True;没有尝试过)。

b。可执行文件本身不存在(但您检查了您说的内容)。

C。可执行文件不是可执行文件(缺少权限位)。

d。该可执行文件在其第一行中指定一个不存在的解释器(使用#!)(例如,#!/bin/sh或类似的)。


这些是否适用?

关于python - 无法在Python中使用子流程模块(无此类文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19655178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com