Mam skrypt Batch, który wywołuje Python, a następnie uruchamia program w języku Python.
Zamiast tego użyć skryptu Batch, chciałbym użyć PowerShell.
Nie jestem programistą ani scripteriem, a ja googlowałem i szukałem bez żadnego szczęścia, jak uzyskać poprawną składnię. Podczas testowania użyłem kilku komend: invoke-item, invoke-command, set- i get-variable oraz innych, o których zapomniałem itd.
Czy ktoś może podać poprawną składnię PowerShell, aby najpierw wywołać, plik wykonywalny Pythona, a następnie sam skrypt Python?
Skrócony skrypt Batch jest osadzony wraz ze skryptem Python, który działa tak, jak powinien.
Z góry dziękuję.
echo off
set winpy=C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\
if EXIST %winpy% (
"%winpy%python.exe" "%~dp0HBSS_XML_Parser_Driver_Action.py" )
Nazwany skrypt Python
import HBSS_Classes, os, HIPS_8_FW_XML_Parser_Action
hbss_parser = HBSS_Classes.HBSSXMLParser()
xmlfiles = []
print('############################')
print('# UNDER ACTIVE DEVELOPMENT #')
print('############################\n')
print("HBSS XML PARSER - DEVELOPED BY WADE, TIMOTHY J.")
print("This CLI application will create human readable CSV spreadsheets
from\n""XML files directly exported from the McAfee ePolicy Orchestrator.")
print("\nSupported products:\n")
for each_entry in hbss_parser.product_dict:
print(" " + each_entry)
print(" HOSTIPS_8000_FW")
print("\nThe following files will be checked against supported "
"XML file types:\n")
for each_file in os.listdir():
if each_file.endswith('.xml'):
xmlfiles.append(each_file)
print(each_file)
date_check = input("\nFor HIPS 8 FW Policies only, would you also like to create an additional \n.CSV file containing only new rules created/modified since a given date? \n(For all other policies, enter N): Y/N ")
if (date_check.lower().startswith('y')):
date_input = input("\nFile will only contain new rules created/modified since\n MM-DD-YYYY? (include hyphens when entering date value): ")
sincedate = True
else:
sincedate = False
begin_check = input("\nBegin parsing to CSV? Y/N ")
if (begin_check.lower().startswith('y')):
hbss_parser.currentDirXMLListBLDR()
hbss_parser.hbssObjectListBLDR()
hbss_parser.hbssObjParseToCSV()
dirfiles = os.listdir()
for xmlfile in xmlfiles:
if (xmlfile[:-4] + '_CSV.csv') in dirfiles:
pass
else:
try:
args = ['HIPS_8_FW_XML_Parser_Action.py', xmlfile]
HIPS_8_FW_XML_Parser_Action.main(args, True)
if sincedate:
args = ['HIPS_8_FW_XML_Parser_Action.py', xmlfile, date_input]
HIPS_8_FW_XML_Parser_Action.main(args, True)
except:
pass
else:
pass
batch
python
powershell-5.0
user714888
źródło
źródło
Odpowiedzi:
Najlepszym sposobem na sprawienie, że podążę właściwą drogą, jest złamanie działania pliku wsadowego w odpowiednich komponentach. Jest to bardzo prosty plik wsadowy, który wykonuje środowisko Pythona i nakazuje mu uruchomienie określonego skryptu. Patrząc na skrypt Pythona, wydaje się, że plik wsadowy ma być uruchamiany z folderu zawierającego skrypt Pythona i jeden lub więcej plików .xml.
echo off
Echo off po prostu mówi systemowi Windows, aby nie wyświetlał każdego polecenia w pliku wsadowym na ekranie. Jest to czystszy sposób na uruchamianie plików wsadowych i jest obecny w prawie wszystkich plikach wsadowych. Nie jest to konieczne w Powershell.
set winpy=C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\
To polecenie tworzy zmienną o nazwie
winpy
który jest równy ścieżce, w której znajduje się twój plik wykonywalny Pythona.if EXIST %winpy% (
Jest to początek instrukcji JEŻELI, która najpierw sprawdza, czy ścieżka została podana
winpy
faktycznie istnieje. Jeśli tak, to uruchamia kod między dwoma nawiasami."%winpy%python.exe" "%~dp0HBSS_XML_Parser_Driver_Action.py" )
To jest linia, która wykonuje rzeczywistą pracę. Zaczyna się
python.exe
plik wykonywalny z parametrem wiersza poleceń bieżącej ścieżki i nazwą skryptu.%~dp0
rozwija się na dysk i ścieżkę, na której uruchomiłeś plik wsadowy.Dlatego jeśli nazwiesz ten plik
mybatch.bat
i umieść goc:\test
to są przykłady polecenia, które uruchamia:Przykład 1: Jeśli masz otwarte okno wiersza polecenia i aktualnie znajdujesz się w
c:\users\yourname\downloads
folder i wpisujeszc:\test\mybatch.bat
Aby wykonać ten plik wsadowy, plik wsadowy uruchomi następujące polecenie:Przykład 2: Jeśli masz otwarte okno wiersza polecenia i aktualnie znajdujesz się w
c:\test\
folder i wpisujeszmybatch.bat
Aby wykonać ten plik wsadowy, plik wsadowy uruchomi następujące polecenie:Odpowiednik Powershell v3 lub nowszy skrypt wyglądałby tak:
źródło