如何通过python执行shell脚本

问题描述 投票:2回答: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脚本文件也位于其他目录中。我希望输出记录在日志中。

python shell subprocess popen
3个回答
2
投票

通常您要使用Popen,因为之后您具有过程控制权。试试:

Popen

1
投票

尝试一下:

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)

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

我通常也建议使用//xyz.py name = 'FUnCOder' filename1 = 'aaa.txt' filename2 = 'bbb.txt' process = subprocess.Popen(['abc.sh', name, filename1, filname2], stdout=PIPE) process.wait() ,尽管在某些情况下有必要使用shell=False

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

shell=True

0
投票

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

with open("logfile.log") as file:
    file.writelines(process.stdout)

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

© www.soinside.com 2019 - 2024. All rights reserved.