我已经尝试过没有运气的方法,Docs也没有多说存储输出。我试过以下内容:
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:不能cd到/ var / log / messagelog”。希望这是我在这里犯的一个新手错误,所以非常感谢这里的另一双眼睛。
编辑:我想在这里做的就是查看目录是否存在,如果不存在,则创建目录。可能还有其他方法可以做到这一点,但我所看到的一切都指向了子进程。 cd不是程序,因此我必须使用call而不是Popen。
答案 0 :(得分:4)
使用os
模块检查目录是否存在,如果不存在potential race condition则创建目录:
import os
if not os.path.isdir('/var/log/messagelog'):
os.mkdir('/var/log/messagelog')
您也可以尝试创建它并检查特定错误:
import os
try:
os.mkdir(path)
except OSError as e:
if e.errno == 17:
print("dir exists")
else:
raise
如果EEXIST
常数更具可读性,则可以使用import errno
import os
try:
os.mkdir(path)
except OSError as e:
if errno.EEXIST == e.errno:
print("dir exists")
else:
raise
常量:
@async
这只会捕获目录存在错误,会引发任何其他OSError,这可能是您想要的也可能不是。
答案 1 :(得分:0)
你应该使用
proc = sp.Popen(..., stdout=filehandle)
err = proc.communicator()
而不是sp.call
。输出将在out
。
检查文档。