我正在尝试一个源shell脚本有函数。而不是试图执行它像下面。
source ~/abc.sh; abc arg1 arg2 arg3 arg4a
它在unix shell中工作。但是当我试图从python脚本内部执行相同的命令时,它会出现错误
def subprocess_cmd(command):
process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
proc_stdout = process.communicate()[0].strip()
return proc_stdout
command = "bash -c source ~/abc.sh; abc arg1 arg2 arg3 arg4a"
out = subprocess_cmd(command)
print(out)
当我执行上面的python代码时,它给出了下面的错误。
~/abc.sh: line 0: source: filename argument required
source: usage: source filename [arguments]
/bin/sh: line 1: abc: command not found
1条答案
按热度按时间zvokhttg1#
来自Popen参考:
在shell=True的POSIX上,shell默认为/bin/sh。如果args是一个字符串,则该字符串指定要通过shell执行的命令。这意味着该字符串的格式必须与在shell提示符下键入时的格式完全相同。例如,这包括引号或反斜杠转义带有空格的文件名。
所以你传递的命令必须作为一个shell命令传递。
当我在shell中运行单个POSIX shell命令时:
所以这里的python没什么特别的。
出现此错误的原因是此命令相当于:
abc.sh
abc
现在可在新的bash shell中使用abc
您要做的是:
abc.sh
abc
现在可在新的bash shell中使用abc
因此,您希望在同一shell中使用以下两个命令:
即:
(note单引号所在的位置。)
Python皮: