Python subprocess.getoutput-ra hiba: 'module' object has no attribute 'getoutput'

0 votes
asked Mar 27, 2013 in IRF tantárgy by inferno88 (46 points)  
retagged Mar 28, 2013 by micskeiz

Hali!

Az ldapsearch parancsot paraméterestől a subprocess.getoutput paranccsal szeretném kiadni,de valamiért hibát dob a fordítás során.

Ezt adom ki:

myQuery = "ldapsearch -H ldap://localhost:389 -x -b \"{1}\" \"sn={0}\"".format(lastname,oustring)
returnedL = subprocess.getoutput(myQuery)

2 Answers

0 votes
answered Mar 27, 2013 by horanyi.gergo (213 points)  
selected Mar 28, 2013 by inferno88
 
Best answer

A getoutput egy legacy parancs, ne azt használd! Helyette inkább a subprocess.check_output-tal tudsz külső hívásokat indítani.
Erről részleteket: http://docs.python.org/3.3/library/subprocess.html
(Lásd még a szkriptelés gyakorlat anyaga.)

0 votes
answered Mar 27, 2013 by inferno88 (46 points)  

Most megpróbáltam ezt is,de hibát kapok.
A következőt írtam be:

returnedL = subprocess.Popen(['ldapsearch -H ldap://localhost:389 -x -b \"',oustring,'\" \"sn=',lastname,'\"']

Igazán nem értem,hogy mi a baja.Amúgy mástól hallotam,hogy a getoutput-tal neki működött.

Hibaüzenet:

Traceback (most recent call last):
  File "discover_corruption.py", line 163, in <module>
    returnedL = subprocess.Popen(['ldapsearch -H ldap://localhost:389 -x -b \"',oustring,'\" \"sn=',lastname,'\"'], shell=False, stdout=subprocess.PIPE)    
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception

A kiadott virtuális gépen dolgozom,ez sem lehet gond.
(A sciptelés gyakorlat anyagában nincs szó subprocessekről,csak tiszta command line meghívásról)

commented Mar 27, 2013 by kviktor (84 points)  
Rakd mellé, hogy shell = True és szerintem jó lesz. (nekem, ha így egybe írtam, be akkor mindig azt írta ki, hogy nincs ilyen parancs, mert az egészre hitte, hogy a parancs (alapból ugy ezt elvileg tagolni kéne ['parancs','paraméterek'] formában), ha így egybe akarod, akkor viszont kell a shell = True)

Illetve Stringeket ne így fűzz össze, hanem vagy C-szerűen
"A nevem %s és a korom %d" % ('Bela', 5)

vagy .format segítségével
"A nevem {0} és a korom {1}".format('Bela', 5)
commented Mar 28, 2013 by inferno88 (46 points)  
Működik.Köszi
...