Python wysyłanie komendy

0

Witam, mam pytanie. W jaki sposób wysłać w systemie komendę, która jest już zdeklarowana w systemie?

np miejscowosc <id> <nazwa> <wojewodztwo> ?

Z góry dziękuję za pomoc. Czytałem o metodach os.system, sys. i subprocess, ale jakoś póki co nie za bardzo je ogarniam i nie wiem 1. czy to dobry trop, 2. jaka metoda będzie najlepsza.

0

Cała bajka:
[code]
from os import system

system("strzel_z_palca")
[/code]

A ja mam inne pytanie. Czy jest możliwe przechwycenie wyjścia programu uruchomionego metodą system?

Wymyśliłem takie obejście:

[code]
from os import system

system("grozny_program > /tmp/plik_tymczasowy")
tmpfile = open('/tmp/plik_tymczasowy','r')
data = ""
for line in tmpfile.readlines():
data += line
tmpfile.close()
[/code]

Ale byłoby dużo mądrzej [u]przechwycić[/u] strumień wyjściowy groznego_programu zamiast wrzucać to do pliku o.O

0

Mod... Powyższy post jest do wyrzcucenia, sorry za robotę, gapa ze mnie :)

Cała bajka:

from os import system

system("strzel_z_palca")

A ja mam inne pytanie. Czy jest możliwe przechwycenie wyjścia programu uruchomionego metodą system?

Wymyśliłem takie obejście:

from os import system

system("grozny_program > /tmp/plik_tymczasowy")
tmpfile = open('/tmp/plik_tymczasowy','r')
data = ""
for line in tmpfile.readlines():
	data += line
tmpfile.close()

Ale byłoby dużo mądrzej [u]przechwycić[/u] strumień wyjściowy groznego_programu zamiast wrzucać to do pliku o.O

0

Zależy, co nazywasz wyjściem programu. Np

x=os.system("ls")
x #0

czyli wyjściem jest liczba 0 (kod błędu), a wypisanie zawartości katalogu jest czynnościa uboczną.
Wyjście możesz przechwycić tak:

import sys,os,StringIO
c=StringIO.StringIO()
sys.stdout=c
c.write(os.system("groźny_program"))
sys.stdout=sys.__stdout__
c
0

dzięki za odpowiedź!
Nie za bardzo śmigał mi ten Twój kod, ale znalazłem coś, czego szukałem, może komuś jeszcze się przyda:)

def system_capture(command):
    subshell_as_file = os.popen(command)
    data = subshell_as_file.read()
    err = subshell_as_file.close()
    if err:
		raise RuntimeError, '%s failed w/ exit code %d' % (command, err)
    return data

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