Nazovite vanjsku naredbu u pythonu

Kako mogu pozvati vanjsku naredbu (kao da sam je upisao u Unix ljusci ili na Windows naredbenu liniju) iz Python skripte?

4003
18 сент. freshWoWer je postavljen na 18 sep . 2008-09-18 04:35 '08 u 4:35 am 2008-09-18 04:35
@ 56 odgovora
  • 1
  • 2

Pogledajte modul potprocesa u standardnoj knjižnici:

 import subprocess subprocess.run(["ls", "-l"]) 

Prednost potprocesa u odnosu na sustav je u tome što je fleksibilniji (možete dobiti stdout, stderr, "pravi" statusni kod, bolje rukovanje pogreškama, itd.).

Službena dokumentacija preporučuje modul potprocesa umjesto alternativnog os.system ():

Modul potprocesa pruža snažnije alate za stvaranje novih procesa i dobivanje njihovih rezultata; korištenje ovog modula poželjnije je od korištenja ove funkcije [ os.system() ].

Odjeljak " Zamjena starih funkcija s modulom potprocesa " u dokumentaciji potprocesa može imati nekoliko korisnih recepata.

3839
18 сент. Odgovor koji je dao David Cournapeau 18. rujna 2008-09-18 04:39 '08 u 4:39 2008-09-18 04:39

Ovdje je kratak opis kako nazvati vanjske programe i prednosti i nedostatke svake od njih:

  • os.system("some_command with args") prosljeđuje naredbu i argumente vašoj ljusci sustava. To je dobro jer na ovaj način možete pokrenuti nekoliko naredbi odjednom i konfigurirati kanale i I / O preusmjeravanje. Na primjer:

     os.system("some_command < input_file | another_command > output_file") 

    Međutim, iako je to prikladno, morate ručno obraditi izbjegavanje znakova ljuske, kao što su razmaci, itd. S druge strane, također vam omogućuje pokretanje naredbi koje su samo naredbe ljuske, a ne zapravo vanjski programi. Pogledajte dokumentaciju .

  • stream = os.popen("some_command with args") će učiniti istu stvar kao i os.system , osim što vam daje objekt sličan datoteci koji možete koristiti za pristup standardnim I / O za ovaj proces. Postoje još 3 popen opcije koje obrađuju i / o malo drugačije. Ako sve proslijedite kao niz, vaša se naredba prosljeđuje ljusci; ako ih proslijedite na popis, ne morate brinuti o izbjegavanju bilo čega. Pogledajte dokumentaciju .

  • Popen modula klase Popen . To je zamjena za os.popen , ali ima manu da je malo kompliciranija zbog činjenice da je tako sveobuhvatna. Na primjer, rekli biste:

     print subprocess.Popen("echo Hello World", shell=True, stdout=subprocess.PIPE).stdout.read() 

    umjesto:

     print os.popen("echo Hello World").read() 

    ali lijepo je imati sve opcije u jednoj ujedinjenoj klasi umjesto 4 različite popen funkcije. Pogledajte dokumentaciju .

  • Funkcija call iz modula subprocess . To je u osnovi isto što i Popen klasa i uzima sve iste argumente, ali samo čeka da se naredba dovrši i dobit ćete povratni kod. Na primjer:

     return_code = subprocess.call("echo Hello World", shell=True) 

    Pogledajte dokumentaciju .

  • Ako koristite Python 3.5 ili noviji, možete koristiti novu funkciju subprocess.run , koja je vrlo slična gore navedenoj, ali još fleksibilnija i vraća CompletedProcess objekt kada naredba dovrši izvršenje.

  • Os modul također ima sve fork / exec / spawn funkcije koje imate u C programu, ali ne preporučujem ih koristiti izravno.

Modul subprocess vjerojatno bi trebao biti ono što koristite.

border=0

Na kraju, imajte na umu da su za sve metode u kojima prolazite posljednju naredbu koju će ljuska izvršiti kao niz, odgovorni za njeno brisanje. Postoje ozbiljne sigurnosne implikacije ako se bilo koji dio prenesenog niza ne može u potpunosti pouzdati. Na primjer, ako korisnik unese bilo koji / bilo koji dio niza. Ako niste sigurni, koristite ove metode samo s konstantama. Da biste saznali posljedice, razmotrite ovaj kôd:

 print subprocess.Popen("echo %s " % user_input, stdout=PIPE).stdout.read() 

i zamislite da korisnik ulazi "moja majka mi se nije svidjela rm -rf /".

2641
18 сент. Odgovor daje Eli Courtwright 18 sep . 2008-09-18 16:11 '08 u 16:11 2008-09-18 16:11

Obično koristim:

 import subprocess p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): print line, retval = p.wait() 

Možete učiniti ono što želite s podacima stdout u cijevi. Zapravo, možete jednostavno izostaviti ove parametre ( stdout= i stderr= ), i ponašat će se kao os.system() .

290
18 сент. Odgovor daje EmmEff 18 sep . 2008-09-18 21:20 '08 u 21:20 2008-09-18 21:20

Neki savjeti o odvajanju dijete procesa od pozivatelja (pokretanje dijete proces u pozadini).

Pretpostavimo da želite izvesti dugačak zadatak iz CGI skripte, to jest, podređeni proces mora živjeti dulje od procesa izvršavanja CGI skripte.

Klasični primjer iz dokumenata modula potprocesa:

 import subprocess import sys # some code here pid = subprocess.Popen([sys.executable, "longtask.py"]) # call subprocess # some more code here 

Ideja je da ne želite čekati u potprocesu "pozivni sub" dok se ne dovrši longtask.py. No, nejasno je što se događa nakon retka "još jedan kod ovdje" iz primjera.

Moja ciljna platforma bila je besplatna, ali razvoj je bio u sustavu Windows, pa sam naišao na problem u sustavu Windows.

U sustavu Windows (win xp) nadređeni proces neće se dovršiti sve dok longtask.py ne dovrši svoj rad. To nije ono što želite u CGI skripti. Problem nije specifičan za Python, problemi u PHP zajednici su isti.

Rješenje je proslijediti zastavicu stvaranja procesa DETACHED_PROCESS osnovnoj funkciji CreateProcess u win API-ju. Ako ste instalirali pywin32, možete uvesti zastavu iz modula win32process, inače ga morate sami definirati:

 DETACHED_PROCESS = 0x00000008 pid = subprocess.Popen([sys.executable, "longtask.py"], creationflags=DETACHED_PROCESS).pid 

/ * UPD 2015.10.27 @eryksun u komentarima ispod navodi da je semantički ispravna zastavica: CREATE_NEW_CONSOLE (0x00000010) * /

U freebsd javlja se još jedan problem: kada je roditeljski proces dovršen, on također završava dijete procese. A to nije ono što želite u CGI skripti. Neki eksperimenti su pokazali da se čini da problem predstavlja dijeljenje sys.stdout. A radna odluka bila je sljedeća:

 pid = subprocess.Popen([sys.executable, "longtask.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) 

Nisam provjerio kod na drugim platformama i ne znam razloge za ponašanje na freebsd. Ako netko zna, podijelite svoje ideje. Googlanje pri pokretanju pozadinskih procesa u Pythonu još uvijek ne baca svjetlo.

182
12 февр. odgovor s obzirom na newtover 12. veljače 2010-02-12 13:15 '10 u 13:15 2010-02-12 13:15

Preporučio bih da koristite modul potprocesa umjesto os.system, jer je on onemogućen za vas i stoga mnogo sigurniji: http://docs.python.org/library/subprocess.html

 subprocess.call(['ping', 'localhost']) 
113
18 сент. odgovor dao sirwart 18 sep . 2008-09-18 04:42 '08 u 4:42 2008-09-18 04:42
 import os cmd = 'ls -al' os.system(cmd) 

Ako želite vratiti rezultate naredbe, možete koristiti os.popen . Međutim, to je zastarjelo od verzije 2.6 u korist modula potprocesa , koji su drugi odgovori dobro razmotrili.

110
18 сент. Odgovor dao je Alexandra Franks 18. rujna 2008-09-18 04:37 '08 u 4:37 na 2008-09-18 04:37
 import os os.system("your command") 

Napominjemo da je ovo opasno jer naredba nije izbrisana. Ostavljam ga za vas u googleu za relevantnu dokumentaciju o modulima "os" i "sys". Postoji hrpa funkcija (exec * i spawn *) koje će učiniti takve stvari.

97
18 сент. Odgovor daje nimish 18 sep . 2008-09-18 04:37 '08 u 4:37 na 2008-09-18 04:37

Postoji mnogo različitih knjižnica koje vam omogućuju pozivanje vanjskih naredbi pomoću Pythona. Za svaku knjižnicu dao sam opis i pokazao primjer pozivanja vanjske naredbe. Primjerice, koristio sam ls -l (popis svih datoteka). Ako želite saznati više o bilo kojoj knjižnici koju sam naveo, i povežite dokumentaciju za svaku od njih.

izvori:

To su sve knjižnice:

Nadam se da će vam ovo pomoći da odlučite koju ćete biblioteku koristiti :)

potprocesa

Potproces omogućuje pozivanje vanjskih naredbi i njihovo povezivanje s njihovim ulazno / izlaznim / pogrešnim kanalima (stdin, stdout i stderr). Podproces je zadani izbor za izvršavanje naredbi, ali ponekad su i drugi moduli bolji.

 subprocess.run(["ls", "-l"]) # Run command subprocess.run(["ls", "-l"], stdout=subprocess.PIPE) # This will run the command and return any output subprocess.run(shlex.split("ls -l")) # You can also use the shlex library to split the command 

operativni sustav

Os se koristi za "funkcionalnost ovisnog o operativnom sustavu". Također se može koristiti za pozivanje vanjskih naredbi pomoću os.system i os.popen (Napomena: postoji i potproces .popen). os uvijek će pokrenuti ljusku i jednostavna je alternativa za ljude koji je ne trebaju ili ne znaju kako koristiti subprocess.run .

 os.system("ls -l") # run command os.popen("ls -l").read() # This will run the command and return any output 

w

sh je sučelje podprocesa koje vam omogućuje pozivanje programa kao da su funkcije. To je korisno ako želite pokrenuti naredbu nekoliko puta.

 sh.ls("-l") # Run command normally ls_cmd = sh.Command("ls") # Save command as a variable ls_cmd() # Run command as if it were a function 

voditi

plumbum je knjižnica za Python programe slične skripti. Možete pozivati ​​programe poput funkcija poput sh . Plumbum je koristan ako želite pokrenuti cjevovod bez omotača.

 ls_cmd = plumbum.local("ls -l") # get command ls_cmd() # run command 

pexpect

pexpect vam omogućuje stvaranje dječjih aplikacija, upravljanje njima i pronalaženje uzoraka u vašem izdanju. Ovo je najbolji podproces za ne-tty naredbe na Unixu.

 pexpect.run("ls -l") # Run command as normal child = pexpect.spawn('scp foo user@example.com:.') # Spawns child application child.expect('Password:') # When this is the output child.sendline('mypassword') 

tkanina

tkanina je Python 2.5 i 2.7 knjižnica. To vam omogućuje izvršavanje lokalnih i udaljenih naredbi ljuske. Cloth je jednostavna alternativa pokretanju naredbi u sigurnom ljusku (SSH)

 fabric.operations.local('ls -l') # Run command as normal fabric.operations.local('ls -l', capture = True) # Run command and receive output 

glasnik

Poslanik je poznat kao "podproces za ljude". Koristi se kao prikladan poklopac oko modula subprocess .

 r = envoy.run("ls -l") # Run command r.std_out # get output 

naredbe

commands sadrže wrapper funkcije za os.popen , ali je uklonjen iz Pythona 3, budući da je subprocess najbolji izbor.

Uređivanje se temeljilo na komentaru JF Sebastiana.

61
29 окт. Odgovorite Tomu Fulleru 29. listopada 2016-10-29 17:02 '16 u 17:02 2016-10-29 17:02

Uvijek koristim fabric za stvari kao što su:

 from fabric.operations import local result = local('ls', capture=True) print "Content:/n%s" % (result, ) 

Ali to se čini kao dobar alat: sh (Python sučelje potprocesa) .

Pogledajte primjer:

 from sh import vgdisplay print vgdisplay() print vgdisplay('-v') print vgdisplay(v=True) 
59
13 марта '12 в 3:12 2012-03-13 03:12 Odgovor je dao Jorge E. Cardona 13. ožujka 2012. u 3:12 2012-03-13 03:12

Također pogledajte Python knjižnicu "pexpect".

Omogućuje interaktivnu kontrolu vanjskih programa / naredbi, čak i ssh, ftp, telnet, itd. Možete jednostavno unijeti nešto poput:

 child = pexpect.spawn('ftp 192.168.0.24') child.expect('(?i)name .*: ') child.sendline('anonymous') child.expect('(?i)password') 
58
07 окт. odgovor dati athanassis Oct 07. 2010-10-07 10:09 '10 u 10:09 2010-10-07 10:09

Ako trebate izlaz iz naredbe koju zovete, možete koristiti subprocess.check_output (Python 2. 7+).

 >>> subprocess.check_output(["ls", "-l", "/dev/null"]) 'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' 

Također zabilježite opciju ljuske .

Ako je ljuska True , navedena naredba će se izvršiti kroz ljusku. To može biti korisno ako Python koristite prvenstveno za napredni tok upravljanja koji nudi za većinu sistemskih ljuski, i još uvijek želite imati jednostavan pristup drugim funkcijama ljuske, kao što su školjke, zamjenski znakovi datoteka, varijable okruženja i ekstenzija ~ za direktorij korisnika. Međutim, imajte na umu da Python nudi implementacije mnogih funkcija ljuske (posebno, glob , fnmatch , os.walk() , os.path.expandvars() , os.path.expanduser() i shutil ).

52
28 апр. Odgovor dao Facundo Casco 28. travnja 2011-04-28 23:29 '11 u 23:29 2011-04-28 23:29

Sa standardnom knjižnicom

Korištenje podprocesa modula (Python 3):

 import subprocess subprocess.run(['ls', '-l']) 

Ovo je preporučena standardna metoda. Međutim, složeniji zadaci (cijevi, izlazi, ulaz, itd.) Mogu biti zamorni za stvaranje i pisanje.

Napomena za Python: Ako još uvijek koristite Python 2, subprocess.call radi na isti način.

ProTip: shlex.split vam može pomoći da raščlanite naredbu za run , call i druge funkcije subprocess u slučaju da ne želite (ili ne možete!) Navedite ih u obliku popisa:

 import shlex import subprocess subprocess.run(shlex.split('ls -l')) 

S vanjskim ovisnostima

Ako vam ne smeta vanjska ovisnost, koristite plumbum :

 from plumbum.cmd import ifconfig print(ifconfig['wlan0']()) 

Ovo je najbolja ljuska subprocess . To je cross-platforma, to jest, radi na Windows i Unix sustavima. Instalirajte na pip install plumbum .

Još jedna popularna knjižnica je:

 from sh import ifconfig print(ifconfig('wlan0')) 

Unatoč tome, sh odbio podržati Windows, pa nije zapanjujuće kao prije. Instalirajte pomoću pip install sh .

48
11 апр. Odgovor daje Honza Javorek 11. travnja 2013-04-11 20:17 '13 u 20:17 2013-04-11 20:17

Evo kako pokrećem svoje naredbe. Ovaj kôd sadrži sve što vam je potrebno.

 from subprocess import Popen, PIPE cmd = "ls -l ~/" p = Popen(cmd , shell=True, stdout=PIPE, stderr=PIPE) out, err = p.communicate() print "Return code: ", p.returncode print out.rstrip(), err.rstrip() 
44
28 окт. Odgovor je dao Usman Khan 28. listopada. 2012-10-28 08:14 '12 u 8:14 am 2012-10-28 08:14

Update:

subprocess.run je preporučeni pristup iz Pythona 3.5 , ako vaš kod ne treba održavati kompatibilnost s ranijim verzijama Pythona. Ona je dosljednija i nudi sličnu jednostavnost korištenja kao glasnik. (Cjevovod nije tako jednostavan, ali vidi ovo pitanje kao .)

Evo nekoliko primjera dokumenata .

Pokreni postupak:

 >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) 

Podizanje nije uspjelo:

 >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 

Izlaz snimanja:

 >>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n') 

Izvorni odgovor:

Preporučujem pokušati izaslanika . To je ljuska za potproces, koji zauzvrat pokušava zamijeniti starije module i funkcije. Glasnik je podproces za ljude.

Primjer čitanja:

 >>> r = envoy.run('git config', data='data to pipe in', timeout=2) >>> r.status_code 129 >>> r.std_out 'usage: git config [options]' >>> r.std_err '' 

Otpor cijevi:

 >>> r = envoy.run('uptime | pbcopy') >>> r.command 'pbcopy' >>> r.status_code 0 >>> r.history [<Response 'uptime'>] 
41
15 нояб. Odgovor je dao Joe 15. studenog. 2012-11-15 20:13 '12 u 20:13 2012-11-15 20:13

Bez izlaza:

 import os os.system("your command here") 

Sa objavljivanjem rezultata:

 import commands commands.getoutput("your command here") or commands.getstatusoutput("your command here") 
33
18 апр. Odgovor dao Zuckonit 18. travnja 2013-04-18 04:09 '13 u 4:09 2013-04-18 04:09

https://docs.python.org/2/library/subprocess.html

... ili za vrlo jednostavnu naredbu:

 import os os.system('cat testfile') 
27
18 сент. Odgovor dao je Ben Hoffstein 18. rujna 2008-09-18 04:43 '08 u 4:43 2008-09-18 04:43

os.system OK, ali čini se datiran. Također nije vrlo sigurna. Umjesto toga pokušajte s subprocess . subprocess ne zove sh izravno i stoga je sigurniji od os.system .

Više informacija potražite ovdje .

26
18 сент. Odgovor daje Martin W 18 rujna. 2008-09-18 04:53 '08 u 4:53 2008-09-18 04:53

Tu je i plumbum

 >>> from plumbum import local >>> ls = local["ls"] >>> ls LocalCommand(<LocalPath /bin/ls>) >>> ls() u'build.py\ndist\ndocs\nLICENSE\nplumbum\nREADME.rst\nsetup.py\ntests\ntodo.txt\n' >>> notepad = local["c:\\windows\\notepad.exe"] >>> notepad() # Notepad window pops up u'' # Notepad window is closed by user, command returns 
26
10 окт. odgovor dati stuckintheshuck 10 listopada. 2014-10-10 20:41 '14 u 20:41 2014-10-10 20:41

Nazovite vanjsku naredbu u pythonu

Jednostavno, upotrijebite subprocess.run , koji vraća objekt CompletedProcess :

 >>> import subprocess >>> completed_process = subprocess.run('python --version') Python 3.6.1 :: Anaconda 4.4.0 (64-bit) >>> completed_process CompletedProcess(args='python --version', returncode=0) 

Zašto?

Kao u Python 3.5, u dokumentaciji se preporučuje subprocess.run :

Preporučeni pristup pozivanju potprocesa jest upotreba funkcije run () za sve slučajeve uporabe koje može obraditi. Za naprednije upotrebe, Popen sučelje se može koristiti izravno.

Evo primjera najjednostavnije moguće upotrebe - i on pita na isti način:

 >>> import subprocess >>> completed_process = subprocess.run('python --version') Python 3.6.1 :: Anaconda 4.4.0 (64-bit) >>> completed_process CompletedProcess(args='python --version', returncode=0) 

run čeka da se naredba dovrši, a zatim vraća objekt CompletedProcess . Umjesto toga može podići TimeoutExpired (ako mu date argument timeout= ) ili CalledProcessError (ako ne uspije i ako check=True ).

Kao što možete zaključiti iz gore navedenog primjera, stdout i stderr su zadani na vašem stdoutu i stderr-u.

Možemo provjeriti vraćeni objekt i vidjeti naredbu koja je specificirana i povratni kod:

 >>> completed_process.args 'python --version' >>> completed_process.returncode 0 

Snimanje izlaza

Ako želite snimiti izlaz, možete subprocess.PIPE prenijeti na odgovarajući stderr ili stdout :

 >>> cp = subprocess.run('python --version', stderr=subprocess.PIPE, stdout=subprocess.PIPE) >>> cp.stderr b'Python 3.6.1 :: Anaconda 4.4.0 (64-bit)\r\n' >>> cp.stdout b'' 

(Smatram ga zanimljivim i pomalo kontroverznim da informacije o verziji ulaze u stderr umjesto stdout.)

Pošaljite popis naredbi

Lako se možete prebaciti s ručnog davanja naredbenog retka (na primjer, pitanja) na stvaranje niza koji je programski izgrađen. Ne programirajte programski nizove. To je potencijalni sigurnosni problem. Bolje je pretpostaviti da ne vjerujete ulaznim podacima.

 >>> import textwrap >>> args = ['python', textwrap.__file__] >>> cp = subprocess.run(args, stdout=subprocess.PIPE) >>> cp.stdout b'Hello there.\r\n This is indented.\r\n' 

Imajte na umu da samo args trebaju biti položeni poziciono.

Potpuni potpis

Evo stvarnog potpisa u izvoru i kao što je prikazano help(run) :

 def run(*popenargs, input=None, timeout=None, check=False, **kwargs): 

popenargs i kwargs dodijeljeni Popen konstruktoru. input može biti niz bajtova (ili unicode, ako navedete kodiranje ili universal_newlines=True ), koji će biti proslijeđen stdin potprocesu.

Dokumentacija opisuje timeout= i check=True bolje nego što bih mogao:

Argument timeout prosljeđuje se Popen.communicate (). Ako istekne vrijeme, dijete proces će biti ubijen i čeka. Iznimka TimeoutExpired će biti ponovno podignuta nakon što se dijete završi.

Ako je provjera ispravna i proces završava s izlaznim kodom koji nije jednak nuli, poziv CalledProcessError će biti povećan. Atributi ove iznimke sadrže argumente, izlazni kod i stdout i stderr, ako su zarobljeni.

i ovaj primjer za check=True bolji od onog na koji se mogu sjetiti:

 >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 

Prošireni potpis

Ovdje je prošireni potpis naveden u dokumentaciji:

 subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None) 

Imajte na umu da to znači da se samo lista argumenata mora položiti pozicionirano. Dakle, preostale argumente proslijedite kao argumente ključnoj riječi.

Popen

Kada umjesto toga koristite Popen ? Ja bih se borio da nađem presedan temeljen samo na argumentima. Međutim, korištenje Popen će vam dati pristup njegovim metodama, uključujući poll , 'send_signal', 'terminate' i 'wait'.

Ovdje potpis Popen , naveden u izvoru . Mislim da je to najtočnija enkapsulacija informacija (za razliku od help(Popen) ):

 def __init__(self, args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None): 

Ali Popen dokumentacija je više informativna:

 subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None) 

Pokrenite program za dijete u novom procesu. U POSIX-u, klasa koristi os.execvp () - slično ponašanje za izvršavanje dječjeg programa. U sustavu Windows klasa koristi funkciju Windows CreateProcess (). Argumenti u Popenu:

Razumijevanje preostale Popen dokumentacije bit će ostavljeno kao vježba za čitatelja.

24
18 окт. Odgovoriti Aaron Hall 18. listopada. 2017-10-18 19:37 '17 u 19:37 2017-10-18 19:37

Upotreba:

 import os cmd = 'ls -al' os.system(cmd) 

os - ovaj modul pruža prijenosni način za korištenje funkcionalnosti operativnog sustava.

Za više os funkcija ovdje je dokumentacija.

23
29 июня '15 в 14:34 2015-06-29 14:34 odgovor je dat Priyankara 29. lipnja '15 u 14:34 2015-06-29 14:34

Može biti tako jednostavno:

 import os cmd = "your command" os.system(cmd) 
22
ответ дан Samadi Salahedine 30 апр. '18 в 16:47 2018-04-30 16:47

subprocess.check_call удобно, если вы не хотите проверять возвращаемые значения. Он генерирует исключение при любой ошибке.

19
ответ дан cdunn2001 18 янв. '11 в 22:21 2011-01-18 22:21

Я обычно использую subprocess вместе с shlex (для обработки экранирования цитируемых строк):

 >>> import subprocess, shlex >>> command = 'ls -l "/your/path/with spaces/"' >>> call_params = shlex.split(command) >>> print call_params ["ls", "-l", "/your/path/with spaces/"] >>> subprocess.call(call_params) 
18
ответ дан Emil Stenström 30 апр. '14 в 17:37 2014-04-30 17:37