子流程中的Shell替换

时间:2019-01-11 19:33:09

标签: python shell subprocess

有人可以指出使用子过程模块进行外壳替换的正确方法。作为一个简单的例子,请考虑以下情况

result = subprocess.check_output(['ls', '-l', '/tmp/`date +"%Y-%m-%d"`'], shell=True)

尝试以下变体没有成功

result = subprocess.check_output(['ls', '-l', '/tmp/$(date +"%Y-%m-%d")'], shell=True)
    result = subprocess.check_output(['ls', '-l', '/tmp/date +"%Y-%m-%d"'], shell=True)

同样,subprocess.Popen会比check_output更好。

1 个答案:

答案 0 :(得分:0)

shell替换仅在shell中发生,并且您没有运行shell。没有办法引用它来使其工作。

相反,请自行完成外壳的工作:

import subprocess
date = subprocess.check_output(['date', '+%Y-%m-%d']).rstrip("\n")
result = subprocess.check_output(['ls', '-l', '/tmp/' + date])
print(result)

或者,您可以在Shell中运行命令。这需要更少的思考,但更脆弱:

result = subprocess.check_output('ls -l /tmp/$(date +"%Y-%m-%d")', shell=True)