改造老Python鳕鱼

2024-09-29 21:28:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面一段老的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()

任何帮助都将不胜感激。你知道吗


Tags: 代码cmdclosebinusrstdinstdoutsys
2条回答

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

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

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

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

就这样!你知道吗

注意:要使用python从标准输入中获取passwd,请查看^{}模块。你知道吗

  1. 使用subprocess时,您的调用可以是一个列表:cmd = ['/usr/bin/passwd', ' stdin', sys_user]
  2. 您缺少proc.communicate()步骤。你知道吗

相关问题 更多 >

    热门问题