[Python] Wykonywanie programu w konsoli ze zmiennymi z Python

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
dhpasta
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 18 sie 2011, 21:30
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

[Python] Wykonywanie programu w konsoli ze zmiennymi z Python

Post 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?
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

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

Post 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.
dhpasta
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 18 sie 2011, 21:30
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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...
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

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

Post autor: ethanak »

a dlaczego nie chcesz skorzystac z oficjalnej dokumentacji? Zapewniam ze strona python.org nie gryzie.
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post autor: karmelek »

A może tak:
from subprocess import call
call(["ls", "-l"])
dhpasta
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 18 sie 2011, 21:30
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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...
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

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

Post 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?
dhpasta
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 18 sie 2011, 21:30
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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ć...
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości