1

Python の subprocess を使用して、Python スクリプト内で Powershell スクリプトを呼び出していますPopen。Powershell スクリプトには、 と の 2 つの入力パラメーターが必要-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  = '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\"'])

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

私は知っています、それは古い質問なので、これはグーグルでこの質問を見つけた人のためのものです:

コメントに記載されている解決策にはいくつかのリスク (文字列インジェクション) があり、特殊文字が含まれていると機能しない可能性があります。より良い:

import subprocess
filename = r'C:\TEMP\test.txt'
uploadkey = 'mytrialtest/test.txt'
subprocess.Popen(['powershell',"-ExecutionPolicy","RemoteSig‌​ned","-File", './Upload.ps1', '-FilePath:', filename , '-S3Key:', uploadkey])

:パラメータ名に が追加されていることに注意してください。ほとんどの場合:、 がなくても機能しますが、値がダッシュで始まる場合は失敗します。

于 2017-05-29T18:56:39.150 に答える