Strona 1 z 1

[Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 01 lut 2012, 08:55
autor: dhpasta
Witam!

Próbuję zrobić coś na miarę GUI dla dajmy na to mdf2iso.
Chodzi o to że zrobię w QT4 pobieranie dwóch linków do folderów, a po wciśnięciu przycisku wykona się polecenie konsoli.
Można by po pokazać tak: mdf2iso %sciezka1 %sciezka2

Ale pytanie, jak się do tego zabrać i czy wgl tędy droga?
W pomocy Ubuntu polecono mi polecenie exec. Przetrząsnąłem google i je znalazłem, ale potrafie wywołać nim tylko polecenie print. Próbowałem choćby wpisać nautilus,co już zwracało błąd... Znalazłem jeszcze polecenie eval, ale z tego co się dowiedziałem służy tylko do operacji na liczbach...

Wpadłem po drodze na drugi pomysł, ale na jego temat nie wiele znalazłem. Co z podłączeniem QT bezpośrednio do basha?

Re: [Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 01 lut 2012, 08:58
autor: ethanak
Tędy. Rzuć okiem na moduł subprocess.
Który idiota Ci o tym exec nagadał? Chyba że chodziło o rodzinę os.exec (a to dwie różne rzeczy). Ale i tak idiota.
Eval nie służy do operacji na liczbach tylko do wykonania dowolnego wyrażenia.

Re: [Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 01 lut 2012, 17:01
autor: dhpasta
Wygrzebałem w necie to: http://www.doughellmann.com/PyMOTW/subprocess/, ale nie wiem czy źle to rozumiem (bo z Pythonie nie miałem nigdy do czynienia. Właściwie z żadnym językiem, jedynie html, css :oops: ), czy może mi czegoś brakuj. Mam taki skrypt:

Kod: Zaznacz cały

#!/usr/bin/python
# -*- coding: utf-8 -*-
import subprocess
subprocess.call(['ls', '-1'], shell=True)
który w terminalu odpalony zwraca:

Kod: Zaznacz cały

kuba@Laptop:~/Pulpit/subprocess$ python subprocess.py
Traceback (most recent call last):
  File "subprocess.py", line 3, in <module>
    import subprocess
  File "/home/kuba/Pulpit/subprocess/subprocess.py", line 6, in <module>
    subprocess.call(['ls', '-1'], shell=True)
AttributeError: 'module' object has no attribute 'call'
I tak, obojętnie który z tych kodów ze strony przekopiuje, i czy coś pozmieniam czy nie...

Re: [Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 01 lut 2012, 17:20
autor: ethanak
a dlaczego nie chcesz skorzystac z oficjalnej dokumentacji? Zapewniam ze strona python.org nie gryzie.

Re: [Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 02 lut 2012, 00:20
autor: karmelek
A może tak:
from subprocess import call
call(["ls", "-l"])

Re: [Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 02 lut 2012, 15:18
autor: dhpasta
Kurcze, nie moge tego zrozumieć...

Napisałem tak:

Kod: Zaznacz cały

#!/usr/bin/python
# -*- coding: utf-8 -*-
from subprocess import call
call(["sudo", "nautilus"])
No i wg. mnie jeśli odpale to w terminalu, to powinien zapytać o hasło i otworzyć nautilusa...

Re: [Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 02 lut 2012, 15:28
autor: ethanak
Według mnie też. Co więcej, jeśli odpalę to w terminalu to właśnie to robi - czego więc nie rozumiesz? Co on w takim razie robi jeśli nie pyta o hasło i nie otwiera nautilusa?

Re: [Python] Wykonywanie programu w konsoli ze zmiennymi z Python

: 02 lut 2012, 15:59
autor: dhpasta
Już mam...
Do sprawdzania używałem terminala w Geany i nie chodziło, a użyłem Guake-a i śmiga!

Przepraszam za zamieszanie

-- 3 lut 2012, o 23:16 --

Mam jeszcze jedno pytanie!
Wymarzyło mi się GUI do mdf2iso z konsoli.
Mam taki kod:

Kod: Zaznacz cały

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from edytor import Ui_mdf2iso_gui
from subprocess import call


class StartQT4(QtGui.QMainWindow):
	def __init__(self, parent=None):
		QtGui.QWidget.__init__(self, parent)
		self.ui = Ui_mdf2iso_gui()
		self.ui.setupUi(self)
		# tutaj dajemy wlasne polaczenia slotow
		QtCore.QObject.connect(self.ui.zrodlo,QtCore.SIGNAL("clicked()"), self.file_dialog)
		QtCore.QObject.connect(self.ui.wynik,QtCore.SIGNAL("clicked()"), self.file_dialog2)
		QtCore.QObject.connect(self.ui.konwertuj,QtCore.SIGNAL("clicked()"), self.file_dialog3)
		
	def file_dialog(self):
		fd = QtGui.QFileDialog(self)
		self.filename = fd.getOpenFileName()
				
	def file_dialog2(self):
		df = QtGui.QFileDialog(self)
		self.filename2 = df.getOpenFileName()
		
	
	def file_dialog3(self):
			call(["mdf2iso", fd])		
		

if __name__ == "__main__":
	app = QtGui.QApplication(sys.argv)
	myapp = StartQT4()
	myapp.show()
	sys.exit(app.exec_())
W interfejsie są 3 guziki:
zrodlo - pobiera adres pliku do konwertowania
wynik - wybiera folder gdzie ma być plik wynikowy (tutaj muszę jeszcze znaleźć jak pobierać ścieżkę folderu, a nie pliku)
konwertuj - który uruchamia polecenie w konsoli

I w tym poleceniu mam dwie zmienne fd i df.
Musze je nazwać, czy opisać jako globalne, bo terminal zwraca:

Kod: Zaznacz cały

Traceback (most recent call last):
  File "notes.py", line 30, in file_dialog3
    call(["mdf2iso", fd])		
NameError: global name 'fd' is not defined
Ale jak i gdzie?

Znalazłem w dokumentacji polecenie global, ale no nie potrafię się nim obsłużyć...