我正在尝试通过python运行shell命令并获取其输出,错误消息并允许用户在被询问时输入是/否。
我和测试它的命令是
cp dummy dummy2 -i
理想情况下,我需要一种pythonic和最新(python3.6)方式,不需要安装额外的软件或库。
贝娄是我的一些尝试:
# input yes
# output no
# error no
os.system(cmd)
# input yes
# output no
# error no
try:
subprocess.run(cmd, check=True, shell=True, bufsize=1, universal_newlines=True)
except Exception as e:
print(e)
上面的代码似乎是来自文档的推荐方式,但是当设置stdout和stderr时,输入不再起作用。更具体地说,程序将等待我的输入但不打印文本,要求我输入。
# input no
# output yes
# error yes
try:
p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE ,check=True, shell=True, bufsize=1, universal_newlines=True)
print(p.stdout)
except Exception as e:
print(e.stderr)
使用Popen应该更灵活,但如果我设置stderr,我会遇到与之前相同的问题。
# input yes
# output yes
# error no
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
shell=True,
bufsize=1,
universal_newlines=True)
out, err = process.communicate()
print('out: ')
print(out)
print('err: ')
print(err)
程序等待我的输入,但在我按回车键之前没有显示任何内容。
# input no
# output yes
# error yes
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True,
bufsize=1,
universal_newlines=True)
out, err = process.communicate()
print('out: ')
print(out)
print('err: ')
print(err)