我不会真正考虑这个多平台,但你可以使用subprocess.Popen:
import subprocess
pipe = subprocess.Popen('dir', stdout=subprocess.PIPE, shell=True, universal_newlines=True)
output = pipe.stdout.readlines()
sts = pipe.wait()
print sts
print output
这是getstatusoutput 的直接替换:
def getstatusoutput(cmd):
"""Return (status, output) of executing cmd in a shell."""
"""This new implementation should work on all platforms."""
import subprocess
pipe = subprocess.Popen(cmd, shell=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = str.join("", pipe.stdout.readlines())
sts = pipe.wait()
if sts is None:
sts = 0
return sts, output
这个sn-p是由原发帖人提出的。自从getstatusoutput 将stderr 复制到stdout 之后,我做了一些更改。
问题在于dir 并不是真正的多平台调用,但subprocess.Popen 允许您在任何平台上执行shell 命令。除非您绝对需要,否则我会避免使用 shell 命令。改为调查 os、os.path 和 shutil 包的内容。
import os
import os.path
for rel_name in os.listdir(os.curdir):
abs_name = os.path.join(os.curdir, rel_name)
if os.path.isdir(abs_name):
print('DIR: ' + rel_name)
elif os.path.isfile(abs_name):
print('FILE: ' + rel_name)
else:
print('UNK? ' + rel_name)