如何在os.system中传递python变量



我正试图将一个os.system()的输出传递给另一个os.system()

然而,我没有得到任何输出。

user = os.system("whoami")
print (user)
box=os.system("docker ps -a --format "{{.Names}}" | grep user")
print (box)

输出:

xvision
256

发布的代码有几个问题:

  1. grep命令中的user字符串,而不是我认为您打算使用的变量
  2. os.system的返回值只是命令的退出状态而不是您要检索的值
  3. 若我并没有记错的话,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调用的需要。

最新更新