• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

python subprocess

Object Storage Arubacloud
+1 głos
785 wizyt
pytanie zadane 30 grudnia 2018 w Python przez gunaterek Bywalec (2,760 p.)

Witam mam problem z subprocessem ,

chodzi o to żeby po wejściu w gnuplot w shellu wczytało plik i wyrzuciło co ma wyrzucić

problem w tym że gdy użyje 

sd = 'load "skrypt.gpl"'
arg = ['gnuplot', sd]
xd = subprocess.Popen(arg, stdout=subprocess.PIPE)
print(xd.communicate())

/home/mat/Documents/python/plotgui/venv/bin/python /home/mat/Documents/python/plotgui/main.py
(b'', None)
"f(x)=a*x + b", line 0: Cannot open script file 'f(x)=a*x + b'
i nie ważne co wpisze w sd to i tak nie wykona tej komendy . Mam podejrzenia ze może jakoś te komende źle czyta bo jest w cudzysłowie.

Jesli zrobie

arg = ['gnuplot']
xd = subprocess.Popen(arg, shell=True, stdout=subprocess.PIPE)

to otwiera się interface w terminalu pycharma z gnuplotu i jeśli wpisze tu komende to działa.
Chce zrobić tak żeby z automatu mi wrzucało te drugą komende. Jesli ktoś miał styczność to proszę o pomoc, z dokumentacji nic się nie da wywnioskować a tutoriali brak.

2 odpowiedzi

0 głosów
odpowiedź 31 grudnia 2018 przez RafalS VIP (122,820 p.)
wybrane 31 grudnia 2018 przez gunaterek
 
Najlepsza

Po pierwsze lepiej użyć subprocess.run zamiast tworzyć goły Popen.

shell=True generalnie ułatwia życie, bo wtedy jako cmd podajesz string dokładnie tego co byś wpisał w konsole, ale powinno się unikać w kodzie produkcyjnym, bo problemy bezpieczeństwa i program jest zależny od zmiennej środowiskowej shell ustawionej u użytkownika. Wiecej tutaj.

Dla shell=False musisz podać liste, w której pierwszy element to komenda a reszta to argumenty. Zadanie bardzo ułatwia funkcja shelx.split, która odpowiednio rozbija string. W dokumentacji jest ładny przykład:

https://docs.python.org/3/library/subprocess.html#subprocess.Popen

Ale mi wydaje się, że po prostu źle korzystasz z gnuplota :D

Jeśli chcesz wykonać skrypt to po prostu: gnuplot skrypt.gpl

Jeśli zależy Ci, żeby wyrysowany wykres wyświetlił sie to argument --persist (-p).

Możesz też podać gnuplotowi komendy w ten sposob:

gnuplot -e  "command1; command2; ..."


A subprocess najlepiej wołać tak:

result = subprocess.run(shlex.split('to co bys wpisal w konsole'))

i w resulcie masz obiekt CompletedProcess, który ma m.in stdout, stderr, returncode.

 

0 głosów
odpowiedź 31 grudnia 2018 przez ciemna_strona_klamki Gaduła (4,360 p.)

Każdy argument jaki przekazujesz do gnuplota przez subprocess to odrębny element tablicy.

Czyli powinno działać

arg = ["gnuplot","load","skrypt.gpl"]

 

komentarz 31 grudnia 2018 przez gunaterek Bywalec (2,760 p.)
Masz racje. Ale w dalszym ciągu nie działa. Próbuje na razie z exit i jesli dam shell=True to

działa tylko ten pierwszy fragment i otwiera się gnuplot w terminalu a jeśli bez shella to

"exit", line 0: Cannot open script file 'exit'
i dalej nic, recznie wpisane działa.

Podobne pytania

0 głosów
1 odpowiedź 68 wizyt
pytanie zadane 14 lutego w Python przez tubylec01 Obywatel (1,290 p.)
0 głosów
0 odpowiedzi 54 wizyt
0 głosów
2 odpowiedzi 98 wizyt
pytanie zadane 6 marca w Python przez Fidzi Nowicjusz (120 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...