Uruchamianie skryptu power shell

Uruchamianie skryptu power shell
Marcin Marcin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 610
0

Mam do uruchomienia skrypt power shella
z poziomu pythona metodą subprocess
Wyskakuje mi taki błąd:

Kopiuj
Error: [NodeId: ReadOp@sourceProduct] Specified 'file' [.0] does not exist.

Implementacja:

Kopiuj
def run_process(command):
    """Running process
    ==========
    .
    ==========

    Function to run process. Platform independent.\n
    **Argument**:
    --------
    - *command* - (require) command to run in shell."""
    if platform.system() == "Linux":
        subprocess.call(command, shell=True)
    elif platform.system() == "Windows":
        script_name = "script.ps"
        script = open(script_name,"w+")
        script.write(command)
        script.close()
        process_list = command.split('\n')
        for x in range(len(process_list)):
            subprocess.call(str("PowerShell.exe" + " " + str(process_list[x])),stdout=sys.stdout)
    else:
        print("Unsupported platform.")

Czy w ten sposób powinienem uruchamiać skrypty power shella?

Po wygenerowaniu skryptu i zrobieniu copy paste do konsoli power shella wszystko działa

UglyMan
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2206
0

Po co zapisujesz skrypt do pliku. Potem z nim nic nie robisz. A jak wywołujesz tą funkcję. Pokaż przykłda testowy.

Marcin Marcin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 610
0

Testowo sprawdziłem czy uruchamianie pliku coś daje - niestety zaczęły wyskakiwać okienka które po chwili się zamykały i tak kolejne do momentu zakończenia.

Poprawiony skrypt:

Kopiuj
def run_process(command):
    """Running process
    ==========
    .
    ==========

    Function to run process. Platform independent.\n
    **Argument**:
    --------
    - *command* - (require) command to run in shell."""
    if platform.system() == "Linux":
        subprocess.call(command, shell=True)
    elif platform.system() == "Windows":
        subprocess.call(str("PowerShell.exe" + " " + command),stdout=sys.stdout)
    else:
        print("Unsupported platform.")
UglyMan
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2206
0

U mnie coś takiego działa i daje poprwaną zwrotkę:

Kopiuj

import platform
import subprocess
import sys


def run_process(command):
    """Running process
    ==========
    .
    ==========

    Function to run process. Platform independent.\n
    **Argument**:
    --------
    - *command* - (require) command to run in shell."""
    if platform.system() == "Linux":
        subprocess.call(command, shell=True)
    elif platform.system() == "Windows":
        subprocess.call(str("PowerShell.exe" + " " + command),stdout=sys.stdout)
    else:
        print("Unsupported platform.")


run_process("Get-Host | Select-Object Version")
Marcin Marcin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 610
0

Błąd jest na tyle dziwny że część skryptów działa a część trzeba przekleić do power shella

Masz jakiś pomysł czym może to być spowodowane?

UglyMan
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2206
0

Pokaż jakiś, który nie działa.

Marcin Marcin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 610
0

Do tych skryptów trzeba postawić dość duże środowisko a to nie jest proste

Myślałem że skypty mające wiele linijek, próbowałem z kodowaniem znaków (podobno power shell musi mieć unicode), znaki końca linii (\n) itd

Marcin Marcin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 610
0

Dodałem:

Kopiuj
        script = command.split('\n')
        for x in range(len(script)):
            subprocess.call(script[x], shell=True)

Zadziałało

Uruchamiam przez cmd a nie power shella
Dlaczego nie zrobiłem tego od razu tak? Skrypty były za długie i dlatego użyłem power shella

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.