我使用Python的子进程Popen
在Python脚本中调用Powershell脚本。 Powershell脚本需要两个输入参数:-FilePath
和-S3Key
。它将文件上载到AWS S3服务器。如果我传入硬编码字符串,脚本可以正常工作。
os.Popen([r'C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe','-ExecutionPolicy','RemoteSigned','./Upload.ps1 -FilePath \"C:\TEMP\test.txt\" -S3Key \"mytrialtest/test.txt\"'])
但是,如果我尝试传入Python字符串变量,则Powershell脚本会错误地说它无法找到filename变量指定的文件。
filename = 'C:\TEMP\test.txt'
uploadkey = 'mytrialtest/test.txt'
os.Popen([r'C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe','-ExecutionPolicy','RemoteSigned','./Upload.ps1 -FilePath \"filename\" -S3Key \"uploadkey\"'])
任何帮助将不胜感激。谢谢。
我知道,这是一个老问题,所以这是通过谷歌找到这个问题的人:
注释中提到的解决方案存在一些风险(字符串注入),如果涉及特殊字符,则可能无效。更好:
import subprocess
filename = r'C:\TEMP\test.txt'
uploadkey = 'mytrialtest/test.txt'
subprocess.Popen(['powershell',"-ExecutionPolicy","RemoteSigned","-File", './Upload.ps1', '-FilePath:', filename , '-S3Key:', uploadkey])
请注意附加到参数名称的:
- 在大多数情况下,它也可以在没有:
的情况下工作,但如果值以短划线开头,则会失败。