从子进程中读取输入,然后在python中打印输出[关闭]

问题描述 投票:0回答:3

原谅我需要问这个问题,但是我在解决自己遇到的问题时遇到了麻烦:我的目标是使用pwd模块检查用户是否存在,如果没有,请创建该用户;我想在调用useradd命令之前打印一条消息,但是我没有尝试过。我不明白在这种情况下应该如何使用Popen。

try:
  pwd.getpwnam('steam')
except KeyError:
  print('test')
  subprocess.run("useradd -b /opt -c 'User for Steam' -s '/usr/sbin/nologin' -mrU steam")
python subprocess
3个回答
0
投票

尝试使用os.popen在shell中运行命令。

import pwd
import os

try:
    pwd.getpwnam("neamtu2") # an invalid user to jump in except
except KeyError:
    print("User is being added")
    output=os.popen("ls -l")  #put your command here
    print(output.read()) # if you want to catch the output

0
投票

这实际上按预期工作。我什至不应该打开这个问题,我的坏。

subprocess.run(["useradd", "-b", "/opt", "-c", "'User for Steam'", "-s", "/usr/sbin/nologin", "-mrU", "steam"]


0
投票

在我的机器上,运行您提供的上述代码将打印'test'。 steam是否有可能是您的计算机上存在的用户,因此代码不会引发KeyError吗?

另一个潜在的陷阱是subprocess.run()将要运行的命令作为args列表。像这样

  subprocess.run(["useradd", "-b", "/opt", "-c", "'User for Steam'", "-s", "'/usr/sbin/nologin'", "-mrU", "steam"])
© www.soinside.com 2019 - 2024. All rights reserved.