有人可以指出使用子过程模块进行外壳替换的正确方法。作为一个简单的例子,请考虑以下情况
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更好。
答案 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)