Как выполнить команду Specifi c Powershell в Python с определенной переменной и выводом на печать? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь запустить указанную команду c из Python в Powershell:

Команда работает в Powershell, как и ожидалось. Команда в Powershell выглядит следующим образом:

 gpt .\Method\gpt_scripts\s1_cal_deb.xml -t .\deburst\S1A_IW_SLC__1SDV_20180909T003147_20180909T003214_023614_0292B2_753E_Cal_deb_script.dim .\images\S1A_IW_SLC__1SDV_20180909T003147_20180909T003214_023614_0292B2_753E.zip

Вывод Powershell:

enter image description here

os.getcwd()

'C:\\Users\\Ishack\\Documents\\Neta-Analytics\\Harvest Dates\\S1_SLC_Processing'

Текущий каталог такой же как в PowerShell

Я пытался что-то вроде этого:

import subprocess


process = 'gpt .\Method\gpt_scripts\s1_cal_deb.xml -t .\deburst\S1A_IW_SLC__1SDV_20180909T003147_20180909T003214_023614_0292B2_753E_Cal_deb_script.dim .\images\S1A_IW_SLC__1SDV_20180909T003147_20180909T003214_023614_0292B2_753E.zip'

process = subprocess.Popen(['powershell.exe', '-NoProfile', '-Command', '"&{' + process + '}"'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)


process

Вывод:

<subprocess.Popen at 0x186bb202388>

Но когда я нажимаю Enter, я не получаю ответа, я хотел бы Python распечатать вывод, как в Powershell. Я исследовал другие подобные вопросы, но все еще не решил проблему.

Спасибо,

Ishack

1 Ответ

0 голосов
/ 29 января 2020
import os
os.system("powershell.exe -ExecutionPolicy Bypass -File .\SamplePowershell.ps1")

SamplePowershell.ps1

Write-Host "Hello world"
hostname

Это сработало для меня. Команды в файле SamplePowershell.ps1 .

и, если вы хотите использовать подпроцесс

import subprocess
k=subprocess.Popen('powershell.exe hostname', stdout=subprocess.PIPE, stderr=subprocess.PIPE);
print(k.communicate())
...