Odczytanie argumentów uruchomieniowych

0

Witam

Napisałem skrypt , który pobiera z niego programu (postprocesora) dane

import sys
if len(sys.argv) >1:

    E_Value = float(sys.argv[1])

code = 'G1 E ' + str(E_Value)

nie bardzo rozumiem jak działa sys.argv? Służy do pobierania danych. Dla sys.argv[1] działa tzn. pobiera daną, Ale nie wiem jak przypisać inną daną w programie głównym , żeby odczytać ja : sys.argv[2]?

Po prostu chcę skorzystać z dwóch zmiennych. W głównym programie nam zmienną self.PRINT_E_NEW i self.PRINT_V_NEW i chcę je wyprowadzić do skryptu.

Dziękuję i pozdrawiam !!

1

sys.argv to tablica przekazanych parametrów wśród których sys.argv[0] to ścieżka i nazwa programu.
Więc jak len(sys.argv) >1 to znaczy że oprócz ścieżki i nazwy programu jest jeszcze jeden parametr.
sys.argv[1] - to właśnie ten jeden parametr.

0

i ten parametr przekazuje główny program do skrypt. Teraz chcę przekazać z głównego programu jeszcze jedną zmienną do skryptu I jak ją przypisać w programie ?
W skrypcie odczytam sys.argv[2 ] - tylko jak zapisać w do tego w głównym programie ?

0

Przeczytałem Nadal nie wiem jak wpisać wartość do parametru sys.argv[2 ] ??
Jak odczytać jest w moim pierwszym poście Tylko nie mogę zapisać tam danej żeby ją przekazać

if len(sys.argv) > 2:
                    
                    sys.argv = str(self.SPEED_MS)

0

@robo1973:

A dlaczego chcesz PRZYPISAĆ ?
Być może to jakoś-tam-jest-możliwe (nie jest zablokowane), ale to tradycyjna dana tylko do odczytu.

Tłuczesz głową w ścianę z gorliwością typową dla XY Problem

robo1973 napisał(a):

Napisałem skrypt , który pobiera z niego programu (postprocesora) dane

Jesli wydaje ci się, że to czytelne zdanie, to masz rację. Wydaje ci się.

Po prostu chcę skorzystać z dwóch zmiennych. W głównym programie nam zmienną self.PRINT_E_NEW i self.PRINT_V_NEW i chcę je wyprowadzić do skryptu.

Pokaż jak go wywołujesz

0

W programie głównym jeżeli jest wywołanie Extruder
to chcę wysłać zmienną SPEED_MS do sys.argv[2] Nie wiem gdzie wpisywana jest zmienna self.PRINT_E_NEW do argv[1] ponieważ ją odczytuję bez problemu

 if code.startswith("Extruder("):

                # Intercept the extruder command.
                # if the program call is Extruder(123.56)
                # we extract the number as a string
                # and convert it to a number

                self.PRINT_E_NEW = float(code[9:-1])
                
                #sys.argv = str(self.PRINT_E_NEW)
                # wywałanie funkcji extruder.py
                self.addline("Extruder")
                
                #sys.argv = str(self.SPEED_MS)  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<????????????????????????????
                    
                #self.addline('Extruder_by Robo %s' % self.PRINT_E_NEW)
                #self.addline('Extruder_by Robo %s' % sys.argv)
                # Skip the program call generation
                return
            else:
                self.addline(code + "()")

Zmienne sys.argv[1] i sys.argv[2] odczytuję skryptami poniżej tylko na argv[2] nic nie trafia

import sys
if len(sys.argv) > 1:

    E_Value = float(sys.argv[1])

i

import sys
if len(sys.argv) > 2:
   e_value = float(sys.argv[2])

if f_value is None :
	f_value = 0
0

sys.argv to są argumenty uruchomieniowe, jeden z poziomów przekazywania danych do uruchamianych procesów. Kiedy startujesz proces, może mu przekazać między innymi takie dane:

  • Listę argumentów uruchomieniowych
  • Dane na wejście standardowe (również znane jako "standard input", albo "stdin")
  • Przechwycić zwracane dane ze standard output oraz standard error (również znane jako "stdout" i "stderr")
  • Zmienne środowiskowe

W różnych językach inaczej odczytuje się argumenty uruchomieniowe, w javie to będzie np public static void main(String[] argv), podobnie w C#, w PHP będzie to $argv, a w pythonie mamy sys.argv.

Jeśli chcesz sprawdzić jak działają, to napisz sobie taki plik test_args.py z treścią:

import sys

for arg in sys.argv:
  print("Kolejny argument to: ")
  print(arg)

I uruchom go w taki sposób

python test_args.py to jest "mój test"

Zobaczysz coś takiego:

C:\Users\Riddle> python test_args.py to jest "mój test"
Kolejny argument to: 
test.py              
Kolejny argument to: 
to                   
Kolejny argument to: 
jest
Kolejny argument to: 
mój test
C:\Users\Riddle> 

W większości systemów operacyjnych nazwa pliku jest przekazywana jako pierwszy argument argumentów uruchomieniowych.

robo1973 napisał(a):

Po prostu chcę skorzystać z dwóch zmiennych. W głównym programie nam zmienną self.PRINT_E_NEW i self.PRINT_V_NEW i chcę je wyprowadzić do skryptu.

Nie odbierzesz żadnych danych, których Twój program nie przekazał. Możesz zrobić print(sys.argv) żeby zobaczyć wszystkie przekazane argumenty.

Innymi słowy - nie w odczytywanie sys.argv jest Twój problem, tylko w miejscu w którym spawnujesz swój proces. Musisz pokazać więcej kodu tego który uruchamia Twój skrypt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1