我有一行Unix Shell代码:
lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*/\1/g'
我希望从Python中的脚本将其传递给shell,并且能够捕获stdout中的输出,因为它将在运行该行代码后显示在终端中。
然而,我无法做到这一点。我试过了:
设置变量我想保持输出(x)等于os.system(lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*/\1/g')
将x
变量设置为subprocess.Popen()
,将所有混乱插入列表,将stdout设置为pipe,将stderr和stdin设置为DEVNULL
将x
设置为subprocess.check_output()
,再次传入整行代码。
将x
设置为等于run()
的输出
我还尝试将lsusb
写入文件,然后将其传递给sed
而不是管道。我试过传递整行代码并将所有等同于shell中的变量,然后将变量x
设置为等于shell变量。最后,我尝试将这行代码的输出传递给文件并读取其中的内容。
我尝试的一切都会给我:
只是0
这些小方形字符有3个零和1个内部
没有
如何以字符串格式将我想要的数据传递给x
变量?这一直困扰着我几天,没有任何帮助。如果我需要使用Python 3,即使我更喜欢使用Python 2.
谢谢大家的帮助!如果您需要更多信息,请询问,我很乐意将它们编辑到这里的问题中供所有人查看。
再次感谢你!
答案 0 :(得分:0)
关于如何在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]\+\).*/\1/g'", shell=True)
您需要shell=True
否则Python会将字符串解释为单个命令,而不是管道。