【发布时间】:2014-05-08 14:24:11
【问题描述】:
我有以下一段旧的 python 代码。
cmd = '/usr/bin/passwd --stdin %s' % sys_user
(pin, pout) = os.popen2(cmd)
pin.write(password)
pin.close()
pout.read()
pout.close()
不是我写的。原来的程序员早已不复存在。文档在 zip 旁边。 open2 已弃用。
那么我如何设法转换为使用子流程?我不是 python 程序员,但可以解决问题。
这段代码不起作用,但我显然遗漏了一些东西。
cmd = '/usr/bin/passwd --stdin %s' % sys_user
proc = subprocess.Popen(cmd, stdin=subprocess.PIPE,stdout=subprocess.PIPE)
proc.stdin.write(password)
proc.stdin.close()
proc.stdout.read()
proc.stdout.close()
任何帮助将不胜感激。
r
【问题讨论】:
-
如果将
cmd替换为shlex.split(cmd),代码应该可以工作。如果您不使用输出,那么只需将其设置为subprocess.DEVNULL或DEVNULL = open(os.devnull, 'wb', 0)(在这种情况下您不需要阅读proc.stdout)而不是PIPE。
标签: python subprocess