ip = subprocess.Popen(["/sbin/ifconfig $(/sbin/route | awk '/default/ {print $8}') | grep \"inet addr\" | awk -F: '{print $2}' | awk \'{print $1}\'"], stdout=subprocess.PIPE)
我不知道在哪里使用逗号分隔它们以使用subprocess.Popen来使用此命令。有谁知道吗?
答案 0 :(得分:3)
您正在使用shell功能(管道),因此您应该将其作为单个字符串(而不是列表)传递给shell=True
ip = subprocess.Popen("/sbin/ifconfig $(/sbin/route | awk '/default/ {print $8}') | grep \"inet addr\" | awk -F: '{print $2}' | awk \'{print $1}\'",
shell=True,
stdout=subprocess.PIPE)
答案 1 :(得分:0)
这是我的建议。
使用此内容创建一个文件 - 将其命名为' route-info'并使其可执行:
#!/bin/sh
/sbin/ifconfig $(/sbin/route | awk '/default/ {print $8}') |
grep "inet addr" |
awk -F: '{print $2}' |
awk '{print $1}'
在你的python程序中,使用:
ip = subprocess.Popen(["/path/to/route-info"], stdout=subprocess.PIPE)
然后您不必担心引用字符,您可以独立测试route-info
脚本以确保其正常工作。
脚本route-info
不会接受任何命令行参数,但如果这样做,则会传递它们:
ip = subprocess.Popen(["/path/to/route-info", arg1, arg2, ...], stdout=subprocess.PIPE)