我正在运行cat
命令以使用subprocess.run()
读取Linux版本。但是它不起作用,错误是:cat: '/etc/*-release': No such file or directory
,由于安全性,我无法使用shell=True
。任何提示如何解决这一点是值得赞赏的。
这是我的代码:
try:
result = subprocess.run(
shlex.split("cat /etc/*-release"),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
except subprocess.TimeoutExpired as err:
result = err
答案 0 :(得分:2)
shell的作用是评估*
。如果你不使用它,你需要自己做,glob
可以帮助你。
所以你可以通过这样做来修复你的例子:
from glob import glob
try:
result = subprocess.run(
["cat"] + glob("/etc/*-release"),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
except subprocess.TimeoutExpired as err:
result = err
答案 1 :(得分:-3)
您可以使用bash命令,以便可以评估*:
process = subprocess.run(['bash', '-i', '-c', 'cat /etc/*-release'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)