我成功地使用了subprocess.check_output来调用大量的windows程序。然而,我很难去叫壁虎。
通过cmd,这种方法可以:
cmd>icacls "C:\my folder" /GRANT *S-1-1-0:F
我试过:
subprocess.check_output(['C:\\Windows\\System32\\icacls.exe','"C:\\my folder"','/GRANT *S-1-1-0:F'],shell=True,stderr=subprocess.STDOUT)
但是返回代码是123 (根据micrsoft,无效的文件名)。
我也尝试过(这也适用于cmd)
subprocess.check_output(['C:\\Windows\\System32\\icacls.exe','"C:/my folder"','/GRANT *S-1-1-0:F'],shell=True,stderr=subprocess.STDOUT)
但返回代码也是123。
有什么想法吗?
发布于 2017-07-31 16:48:55
不要过分引用你的论点,否则它们就会被通过。需要时让check_output处理报价。使用参数列表的最佳方法:
subprocess.check_output(['icacls.exe',r'C:\my folder','/GRANT','*S-1-1-0:F'],stderr=subprocess.STDOUT)(请注意,我删除了shell=True和命令的路径,并使用raw前缀避免了文件夹参数的反斜杠加倍)
发布于 2017-07-31 21:59:21
在Windows上,您最好为命令行提供字符串,而不是序列,特别是如果您已经确切地知道您想要的命令行是什么样的话。传递字符串会告诉Python您知道自己在做什么,它不应该尝试添加引号或修改命令:
subprocess.check_output(
r'C:\Windows\System32\icacls.exe "C:\my folder" /GRANT *S-1-1-0:F',
stderr=subprocess.STDOUT)发布于 2017-08-01 09:06:57
@Jean-Fran ois Fabre给了我一个线索:
引用我的目标参数是有意义的,因为它有空白,因此,在从cmd调用时需要引用。然而,巨蟒似乎会被高估。
谢谢大家的帮助!
https://stackoverflow.com/questions/45421302
复制相似问题