我正试图将一个os.system()
的输出传递给另一个os.system()
。
然而,我没有得到任何输出。
user = os.system("whoami")
print (user)
box=os.system("docker ps -a --format "{{.Names}}" | grep user")
print (box)
输出:
xvision
256
发布的代码有几个问题:
grep
命令中的user
是字符串,而不是我认为您打算使用的变量os.system
的返回值只是命令的退出状态而不是您要检索的值- 若我并没有记错的话,docker将需要提升的权限来执行
ps
命令。也许您的visudo
的设置与我的不同,这允许使用命令,但需要注意
此外,获取用户名的第一个系统调用是不必要的,因为可以使用shell调用作为grep $( whoami )
。但是,如果您希望在docker系统上使用不同的用户名,则可以使用f-string作为:
f'grep | {user}'
相反,这里应该使用subprocess
库,因为您可以从子流程调用中检索值。
例如:
import subprocess
# Note: sudo might be optional in your case, depending on setup.
rtn = subprocess.Popen('sudo docker ps -a --format {{.Names}} | grep $( whoami )',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()
>>> rtn
(b'username', None) # <-- tuple of (stdout, stderr)
获取用户名:
value = rtn[0].decode()
>>> value
'username'
关于shell
调用的注释:
有些人可能会争辩说"应该避免shell
"。然而,在这种情况下,我选择使用它的原因如下:
- 使OP的命令字符串更易于读取
- 为了(更容易(方便管道进入
grep
如果没有进入grep的管道,命令可以拆分为参数列表;从而减轻了对shell调用的需要。