原谅我需要问这个问题,但是我在解决自己遇到的问题时遇到了麻烦:我的目标是使用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")
尝试使用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
这实际上按预期工作。我什至不应该打开这个问题,我的坏。
subprocess.run(["useradd", "-b", "/opt", "-c", "'User for Steam'", "-s", "/usr/sbin/nologin", "-mrU", "steam"]
在我的机器上,运行您提供的上述代码将打印'test'。 steam
是否有可能是您的计算机上存在的用户,因此代码不会引发KeyError吗?
另一个潜在的陷阱是subprocess.run()将要运行的命令作为args列表。像这样
subprocess.run(["useradd", "-b", "/opt", "-c", "'User for Steam'", "-s", "'/usr/sbin/nologin'", "-mrU", "steam"])