【问题标题】:Python subprocess call in linux os not working as expectedlinux os中的Python子进程调用未按预期工作
【发布时间】:2023-03-25 08:14:02
【问题描述】:

我正在 linux 中尝试下面的代码,并尝试在 python 脚本中运行 linux 命令。

下面是脚本:

import os
import sys
from subprocess import call
a = "Team0"
b = "Team0"
c = "\'{\"runner:{\"name\": \"lacp\"}}\'"
cmd = 'nmcli con add type team con-name {} ifname {} config {}'.format(a, b, c)
print cmd
call(cmd.split(), shell=False)

我遇到了错误。

nmcli con add type team con-name Team0 ifname Team0 config '{"runner:{"name": "lacp"}}'
Error: ''{"runner:{"name":' is not a valid team configuration or file name.

我已经在linux命令提示符上复制粘贴了上面的打印命令,它工作正常。

谁能帮我在我的代码中解决这个问题

【问题讨论】:

  • JSON 周围有一层引用过多。
  • 不要在你的命令参数(在这种情况下是你的 JSON)周围添加引号,subprocess.call() 会根据它运行的 shell 自动为你做这件事。

标签: python linux python-2.7


【解决方案1】:

几个问题:

1) 你在一个空间上分裂。所以论点变成:

cmd[0] = nmcli 
cmd[1] = con 
cmd[2] = add 
cmd[3] = type 
cmd[4] = team 
cmd[5] = con-name 
cmd[6] = Team0 
cmd[7] = ifname 
cmd[8] = Team0 
cmd[9] = config 
cmd[10] = '{"runner:{"name": 
cmd[11] = "lacp"}}'

这就是您收到错误消息的原因。请注意,它会在 "lacp"...

之前报告所有内容

2) 由于您设置了shell=False,因此包裹团队配置的单引号不会像您想象的那样被解析。

因此您可以设置shell=True 而不拆分命令或修复解析。

我建议:

 call(cmd, shell=True)

作为最简单的方法(注意缺少拆分)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2013-09-04
    • 2012-11-18
    • 2014-08-01
    • 2018-09-16
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多