使用 python os.system 从 netstat 中提取端口并在变量中使用它

Using python os.system to extract port from netstat and use it in variable

我正在寻找从 netstat 中提取端口并将其用作变量的解决方案。 问题是当我打印它时,值是 0 虽然当我在 bash 中使用相同的命令时它 returns 正确的端口。

device_port = os.system("netstat -atnp 2>/dev/null | awk '/adb/ {print }' | cut -d ':' -f 2")

returns 值 5037

print(device_port)

returns 值 0

我不确定为什么会这样。

谢谢

你的第一个命令不是return 5037,它打印 5037。这是不同的。

查看os.system的文档:https://docs.python.org/3/library/os.html#os.system

声明它将命令的标准输出转发到控制台,return 退出代码命令。

这正是发生的情况,您的代码将 5037 打印到控制台,并且 returns 0 表示命令成功。


修复:

使用 subprocess 而不是 os.systemos.system 的官方文档中甚至推荐使用它。这将允许您捕获输出并将其写入变量:

import subprocess

command = subprocess.run("netstat -atnp 2>/dev/null | awk '/adb/ {print }' | cut -d ':' -f 2",
    check=True,  # Raise an error if the command failed
    capture_output=True,  # Capture the output (can be accessed via the .stdout member)
    text=True,  # Capture output as text, not as bytes
    shell=True)  # Run in shell. Required, because you use pipes.
    
device_port = int(command.stdout)  # Get the output and convert it to an int
print(device_port)  # Print the parsed port number

这是一个工作示例:https://ideone.com/guXXLl

我用 id -u 替换了你的 bash 命令,因为你的 bash 脚本没有在 ideome 上打印任何内容,因此 int() 转换失败。