我正在尝试使用与pkexec一起运行命令,但是说没有找到这样的文件。
process = subprocess.Popen(["pkexec cat", "/dev/input/event4"], stdout=subprocess.PIPE)
for line in iter(process.stdout.readline, ''):
sys.stdout.write(line)
OSError:[Errno 2]没有这样的文件或目录
但是,路径没问题,文件就在那里。
答案 0 :(得分:3)
您可能想要使用:
subprocess.Popen(["pkexec", "cat", "/dev/input/event4"])
由于subprocess.Popen
引用列表中的每个条目;所以你的例子在命令行上使用它是相同的:
$ "pkexec cat" /dev/input/event4
而不是:
$ pkexec cat /dev/input/event4
来自the documentation(强调我的):
所有调用都需要args,它应该是一个字符串或一系列程序参数。 通常首选提供一系列参数,因为它允许模块处理任何必需的转义和引用参数(例如,允许文件名中的空格)。如果传递单个字符串,则shell必须为True(参见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。