改造旧的Python代码

时间:2014-05-08 14:24:12

标签: python subprocess

我有以下一段旧的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

2 个答案:

答案 0 :(得分:0)

  1. 使用subprocess时,您的通话可以是一个列表:cmd = ['/usr/bin/passwd', '--stdin', sys_user]
  2. 您错过了proc.communicate()步骤。

答案 1 :(得分:0)

首先,您最好使用列表作为参数,因为您没有使用shell来执行程序:

cmd = ['/usr/bin/passwd', '--stdin', sys_user]
proc = subprocess.Popen(cmd, stdin=subprocess.PIPE,stdout=subprocess.PIPE)

然后你需要调用proc对象上的communication方法来获取stdin / stdout:

out, err = proc.communicate(password)
for l in out.split('\n'):
    print out

然后你去!

N.B。:要使用python从标准输入获取passwd,请查看getpass模块。