首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python调用windows的icacls

从python调用windows的icacls
EN

Stack Overflow用户
提问于 2017-07-31 16:46:56
回答 3查看 1.8K关注 0票数 1

我成功地使用了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。

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-31 16:48:55

不要过分引用你的论点,否则它们就会被通过。需要时让check_output处理报价。使用参数列表的最佳方法:

代码语言:javascript
复制
subprocess.check_output(['icacls.exe',r'C:\my folder','/GRANT','*S-1-1-0:F'],stderr=subprocess.STDOUT)

(请注意,我删除了shell=True和命令的路径,并使用raw前缀避免了文件夹参数的反斜杠加倍)

票数 3
EN

Stack Overflow用户

发布于 2017-07-31 21:59:21

在Windows上,您最好为命令行提供字符串,而不是序列,特别是如果您已经确切地知道您想要的命令行是什么样的话。传递字符串会告诉Python您知道自己在做什么,它不应该尝试添加引号或修改命令:

代码语言:javascript
复制
subprocess.check_output(
    r'C:\Windows\System32\icacls.exe "C:\my folder" /GRANT *S-1-1-0:F',
    stderr=subprocess.STDOUT)
票数 0
EN

Stack Overflow用户

发布于 2017-08-01 09:06:57

@Jean-Fran ois Fabre给了我一个线索:

引用我的目标参数是有意义的,因为它有空白,因此,在从cmd调用时需要引用。然而,巨蟒似乎会被高估。

谢谢大家的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45421302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档