我試圖從Python運行Powershell子流程。我需要將Python的Powershell代碼發送給子進程。我有這麼多:Powershell可以從stdin中讀取代碼嗎?
import subprocess
import time
args = ["powershell", "-NoProfile", "-InputFormat None", "-NonInteractive"]
startTime = time.time()
process = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.stdin.write("Write-Host 'FINISHED';".encode("utf-8"))
result = ''
while 'FINISHED' not in result:
result += process.stdout.read(32).decode('utf-8')
if time.time() > startTime + 5:
raise TimeoutError(result)
print(result)
這個超時,因爲沒有任何東西會寫入標準輸出。我認爲Write-Host
cmdlet永遠不會被執行。即使是簡單的bash/Cygwin代碼echo "Write-Host 'FINISHED';" | powershell
似乎也沒有完成這項工作。
用於比較,使用-Command
標誌發送代碼塊可正常工作。
我該如何說服Powershell運行我發送給stdin的代碼?
我無法使用文件或「溝通」,因爲需要將一些代碼塊發送到_single_進程。這兩個選項都會導致子進程退出。遺憾的是,分叉多個Powershell流程不是一種選擇。 –
絕對有可能將來自stdin的輸入提供給PowerShell。我添加了一些更多的信息(關於'-Command -')。這應該讓你開始。 –
所以不幸的是,它看起來像Powershell不執行你輸入的代碼,直到它收到EOF。所以我想要做的是不使用某種消息傳遞,這對我的應用來說太複雜了。哦:( –