从 python 调用 windows' icacls
calling windows' icacls from python
我已经成功地使用 subprocess.check_output 调用了大量 windows 程序。
然而,我在调用 icacls 时遇到了麻烦。
通过 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)
但是 return 代码是 123(根据 microsoft,文件名无效)。
我也尝试过(也适用于 cmd)
subprocess.check_output(['C:\Windows\System32\icacls.exe','"C:/my folder"','/GRANT *S-1-1-0:F'],shell=True,stderr=subprocess.STDOUT)
但是 return 代码也是 123.
有什么想法吗?
不要过度引用您的论点,否则它们将按字面意思传递。让 check_output
在需要时处理引用。使用参数列表的最佳方式:
subprocess.check_output(['icacls.exe',r'C:\my folder','/GRANT','*S-1-1-0:F'],stderr=subprocess.STDOUT)
(请注意,我删除了 shell=True
和命令的路径,并使用原始前缀以避免文件夹参数的反斜杠加倍)
在 Windows 上,您最好为命令行提供一个字符串而不是一个序列,特别是如果您已经确切地知道您想要的命令行是什么样的。传递一个字符串告诉 Python 你知道自己在做什么,它不应该尝试添加引号或以其他方式修改命令:
subprocess.check_output(
r'C:\Windows\System32\icacls.exe "C:\my folder" /GRANT *S-1-1-0:F',
stderr=subprocess.STDOUT)
@Jean-François Fabre 给了我线索:
引用我的目标参数是有道理的,因为它有空格,因此,从 cmd 调用时需要引用。但是,似乎 python 会过度引用。
谢谢大家的帮助!!!
我已经成功地使用 subprocess.check_output 调用了大量 windows 程序。
然而,我在调用 icacls 时遇到了麻烦。
通过 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)
但是 return 代码是 123(根据 microsoft,文件名无效)。
我也尝试过(也适用于 cmd)
subprocess.check_output(['C:\Windows\System32\icacls.exe','"C:/my folder"','/GRANT *S-1-1-0:F'],shell=True,stderr=subprocess.STDOUT)
但是 return 代码也是 123.
有什么想法吗?
不要过度引用您的论点,否则它们将按字面意思传递。让 check_output
在需要时处理引用。使用参数列表的最佳方式:
subprocess.check_output(['icacls.exe',r'C:\my folder','/GRANT','*S-1-1-0:F'],stderr=subprocess.STDOUT)
(请注意,我删除了 shell=True
和命令的路径,并使用原始前缀以避免文件夹参数的反斜杠加倍)
在 Windows 上,您最好为命令行提供一个字符串而不是一个序列,特别是如果您已经确切地知道您想要的命令行是什么样的。传递一个字符串告诉 Python 你知道自己在做什么,它不应该尝试添加引号或以其他方式修改命令:
subprocess.check_output(
r'C:\Windows\System32\icacls.exe "C:\my folder" /GRANT *S-1-1-0:F',
stderr=subprocess.STDOUT)
@Jean-François Fabre 给了我线索:
引用我的目标参数是有道理的,因为它有空格,因此,从 cmd 调用时需要引用。但是,似乎 python 会过度引用。
谢谢大家的帮助!!!