3

我有一个脚本说 abc.sh ,其中包含带有标志的命令列表。例子

//abc.sh
echo $FLAG_name
cp   $FLAG_file1   $FLAG_file2
echo 'file copied'

我想通过python代码执行这个脚本。说

//xyz.py

name = 'FUnCOder'
filename1  = 'aaa.txt'
filename2 = 'bbb.txt'

subprocess.call([abc.sh, name, filename1, filname2], stdout=PIPE, stderr=PIPE, shell=True)

此调用不起作用。

还有哪些其他选择?

shell脚本文件也位于其他目录中。我希望输出进入日志。

4

4 回答 4

1

通常你想使用Popen,因为你之后有过程控制。尝试:

process = subprocess.Popen(['abc.sh', name, filename1, filname2], stdout=PIPE, stderr=PIPE)
process.wait() # Wait for process to complete.

# iterate on the stdout line by line
for line in process.stdout.readlines():
    print(line)
于 2013-04-23T22:48:42.307 回答
1

尝试这个:

//xyz.py

name = 'FUnCOder'
filename1  = 'aaa.txt'
filename2 = 'bbb.txt'

process = subprocess.Popen(['abc.sh', name, filename1, filname2], stdout=PIPE)
process.wait()

请注意,'abc.sh' 用引号引起来,因为它不是变量名,而是您正在调用的命令。

一般来说,我也会推荐使用shell=False,尽管在某些情况下有必要使用shell=True

要将输出放入文件中,请尝试:

with open("logfile.log") as file:
    file.writelines(process.stdout)
于 2013-04-23T23:02:31.833 回答
1

我知道这是一个老问题,如果您使用的是 Python 3.5 及更高版本,以下是方法。

import subprocess
process = subprocess.run('script.sh', shell=True, check=True, timeout=10) 

参考: https ://docs.python.org/3.5/library/subprocess.html#subprocess.run

于 2020-05-06T02:00:56.903 回答
0

我在 macOS 上运行我使用的 shell 脚本:

process = subprocess.Popen([abc.sh, name, filename1, filname2], shell=True)

于 2021-07-18T22:36:17.590 回答