从 Python 中的 shell 命令获取标准输出时出现问题
Problems getting stdout back from shell command in Python
我有一行UnixShell代码:
lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*//g'
我想从 Python 中的脚本将其传递给 shell 并能够在 stdout 中捕获输出,因为它将在 运行 之后显示在终端中代码行。
但是,我做不到。我试过:
设置变量我想保持输出 (x) 等于 os.system(lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*//g')
设置 x
变量等于 subprocess.Popen()
,所有这些乱七八糟的东西都作为列表插入,stdout 设置为管道,stderr 和 stdin 设置为 DEVNULL
设置 x
等于 subprocess.check_output()
,再次传入整行代码。
设置x
等于run()
的输出
我也试过将 lsusb
写入文件,然后将其传递给 sed
而不是通过管道传输。我尝试传递整行代码并将所有代码设置为 shell 中的一个变量,然后将变量 x
设置为 shell 变量。最后,我尝试将这行代码的输出传递到一个文件并读取其中的内容。
我尝试过的一切都会给我:
刚好 0
这些小方块字符,里面有 3 个零和一个 1
无
如何将我想要的数据以字符串格式传递给 x
变量?这几天一直困扰着我,没有任何帮助。如果我需要使用 Python 3 没关系,即使我更喜欢使用 Python 2.
谢谢大家的帮助!如果您需要更多信息,请询问,我很乐意将它们编辑到此处的问题中,以供所有人查看。
再次感谢!
关于如何在 Python
中捕获 shell 命令的输出有一个很好的答案
Running shell command from Python and capturing the output
在这种情况下,我怀疑你需要使用
subprocess.check_output("lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*//g'", shell=True)
您需要 shell=True
,否则 Python 会将字符串解释为单个命令,而不是管道。
我有一行UnixShell代码:
lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*//g'
我想从 Python 中的脚本将其传递给 shell 并能够在 stdout 中捕获输出,因为它将在 运行 之后显示在终端中代码行。
但是,我做不到。我试过:
设置变量我想保持输出 (x) 等于
os.system(lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*//g')
设置
x
变量等于subprocess.Popen()
,所有这些乱七八糟的东西都作为列表插入,stdout 设置为管道,stderr 和 stdin 设置为DEVNULL
设置
x
等于subprocess.check_output()
,再次传入整行代码。设置
x
等于run()
的输出
我也试过将 lsusb
写入文件,然后将其传递给 sed
而不是通过管道传输。我尝试传递整行代码并将所有代码设置为 shell 中的一个变量,然后将变量 x
设置为 shell 变量。最后,我尝试将这行代码的输出传递到一个文件并读取其中的内容。
我尝试过的一切都会给我:
刚好 0
这些小方块字符,里面有 3 个零和一个 1
无
如何将我想要的数据以字符串格式传递给 x
变量?这几天一直困扰着我,没有任何帮助。如果我需要使用 Python 3 没关系,即使我更喜欢使用 Python 2.
谢谢大家的帮助!如果您需要更多信息,请询问,我很乐意将它们编辑到此处的问题中,以供所有人查看。
再次感谢!
关于如何在 Python
中捕获 shell 命令的输出有一个很好的答案Running shell command from Python and capturing the output
在这种情况下,我怀疑你需要使用
subprocess.check_output("lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*//g'", shell=True)
您需要 shell=True
,否则 Python 会将字符串解释为单个命令,而不是管道。