从python发送参数并运行bash

从python发送参数并运行bash,python,bash,shell,parameters,subprocess,Python,Bash,Shell,Parameters,Subprocess,我需要一些帮助从python脚本中运行bash脚本。我有一个向python脚本发送参数的程序(例如,“$1”)。我想在python脚本中运行一个bash脚本,向它发送参数,然后在python脚本中接收并打印bash的结果(echo)。这就是我所拥有的: #!/usr/bin/env python import subprocess process = subprocess.Popen('sorter.sh', stdout=subprocess.PIPE, shell=True) out,

我需要一些帮助从python脚本中运行bash脚本。我有一个向python脚本发送参数的程序(例如,“$1”)。我想在python脚本中运行一个bash脚本,向它发送参数,然后在python脚本中接收并打印bash的结果(echo)。这就是我所拥有的:

#!/usr/bin/env python

import subprocess
process = subprocess.Popen('sorter.sh', stdout=subprocess.PIPE, shell=True) 
out, err = process.communicate()
print(out)
但是,当我尝试运行它时,会出现以下错误:/bin/sh:sorter.sh:未找到

当我将参数更改为“sh sorter.sh”时,我得到sh:无法打开“sorter.sh”


我确信bash脚本是有效的。。。当我从shell运行它并为它提供一个文件(sh sorter.sh/file/field/files.jpg)时,一切都很顺利。谁能告诉我我做错了什么?谢谢

根据错误消息,当前工作目录中似乎没有
sorter.sh
。指定脚本的绝对路径

替换以下内容:

process = subprocess.Popen('sorter.sh', stdout=subprocess.PIPE, shell=True) 
与:

或:


要将Python脚本接收到的参数发送到bash脚本,可以使用
sys.argv

#!/usr/bin/env python
import sys
from subprocess import check_output as qx

output = qx(["/path/to/sorter.sh"] + sys.argv[1:])
print output,
如果将python脚本称为
python脚本abc
,那么它将使用
a
b
c
参数调用
sorter.sh


注意:代码要求
sorter.sh
具有适当的执行权限(
chmod+x/path/to/sorter.sh
)。

尝试使用完整路径或./sorter.shOr将相关目录添加到
path
环境变量中。谢谢,第一个这样做了,duh。我原以为bash脚本与python脚本在同一个目录中就足够了。显然不是!我试着运行你的脚本,但得到的是OSError:没有这样的文件或目录(即使有正确的sorter.sh的完整路径)。然后我试着将它与我最初的尝试结合起来,比如:
import sys import subprocess print'Argument List:',str(sys.argv)process=subprocess.Popen([“sh/usr/local/sabnzbd/var/scripts/sorter.sh”]+sys.argv[1:,stdout=subprocess.PIPE,shell=True)out,err=process.communicate()print(out)
现在全部运行,但是参数仍然没有被发送。还有其他想法吗?如果我尝试只向bash发送一个参数,会不会更容易?@Artfail:您应该按原样复制代码(除了指向
sorter.sh
的路径)。什么是shebang(
head-1 sorter.sh
)?
sorter.sh
ls-l sorter.sh
)的文件权限是什么?代码是直接复制的(路径是固定的)。文件权限为755(
-rwxr-xr-x 1 root
),我已经尝试将shebang作为两个
#/bin/bash
#/bin/env bash
;无论哪种方式,我都会得到以下结果:
Traceback(最近一次调用):文件“/usr/local/sabnzbd/var/scripts/worksmac.py”,第5行,在输出=qx([“/usr/local/sabnzbd/var/scripts/hasworked.sh”]+sys.argv[1:])文件“/usr/local/python2.7/subprocess.py”,第568行,在check\u output process=Popen中(stdout=PIPE,*popenargs,**kwargs)文件“/usr/local/python/lib/python2.7/subprocess.py”,第711行,在文件“/usr/local/python/lib/python2.7/subprocess.py”中,第1308行,在“执行”中,在“子女抚养子女”[Errno 2]中没有这样的文件或目录
,当我把它当作
时/usr/bin/env bash
它返回
env:bash:没有这样的文件或目录回溯(最近一次调用):文件“/usr/local/sabnzbd/var/scripts/worksmac.py”,第5行,在输出=qx([“/usr/local/sabnzbd/var/scripts/haswork.sh”]+sys.argv[1:])文件“/usr/local/python2.7/subprocess.py”,第575行,在check_output raise CalledProcessError(retcode,cmd,output=output)子进程中。CalledProcessError:Command“[”/usr/local/sabnzbd/var/scripts/hasworked.sh”“,“/volume1/Storage Unit/^Complete”]”返回非零退出状态127
process = subprocess.Popen(['sh', '/path/to/sorter.sh'], stdout=subprocess.PIPE)
#!/usr/bin/env python
import sys
from subprocess import check_output as qx

output = qx(["/path/to/sorter.sh"] + sys.argv[1:])
print output,