使用subprocess和pkexec

时间:2014-12-01 22:31:04

标签: python subprocess

我正在尝试使用与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]没有这样的文件或目录

但是,路径没问题,文件就在那里。

1 个答案:

答案 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(参见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。