【发布时间】:2016-03-05 18:58:16
【问题描述】:
我已经尝试过没有运气看到的方法,并且文档没有太多关于存储输出的说明。我尝试了以下方法:
import subprocess
f = open(r'/var/log/temp.txt','w')
subprocess.call('cd /var/log/messagelog', shell=True, stdout=f)
f.close()
with open("/var/log/temp.txt",'r') as f:
for line in f:
print line
我要做的就是让程序识别出该目录不存在。我暂时替换了一个简单的打印语句。我不能为此使用 check_output,因为在 30 个不同的系统上更新 Python 对此非常不切实际。打印行应该产生:“cd: can't cd to /var/log/messagelog”。希望这是我在这里犯的一个菜鸟错误,因此非常感谢这里的另一双眼睛。
编辑:我在这里要做的就是查看目录是否存在,如果不存在,则创建目录。可能还有其他方法可以做到这一点,但我所看到的一切都指向子流程。 cd 不是程序,因此我必须使用 call 而不是 Popen。
【问题讨论】:
-
stderr 去哪儿了?
-
您遇到权限错误?还有
cd /var/log/messagelog应该做什么? -
目录不存在,运行命令时出现“cd: can't cd to /var/log/messagelog”语句,因此此处没有权限被拒绝错误。它应该尝试 cd 到那个目录,如果它得到“cant cd”错误,它应该创建那个目录。否则会通过
-
你有写入/var/log的权限吗?您是否以 root 身份运行程序?
-
如果您在 Python 2.6 或更早版本上需要
subprocess.check_output(),请参阅 What's a good equivalent to python's subprocess.check_call that returns the contents of stdout?
标签: python linux subprocess stdout