2013-03-02 14 views
5

w jądrze Linux, mogę wysłać plik do drukarki za pomocą następującego poleceniaUżywając polecenia cat w Pythonie do drukowania

cat file.txt > /dev/usb/lp0 

Z tego co rozumiem, to przekierowuje zawartość w plik.txt do druku Lokalizacja. Próbowałem za pomocą następującego polecenia

>>os.system('cat file.txt > /dev/usb/lp0') 

myślałem, że to polecenie będzie osiągnąć to samo, ale to dało mi „Permission denied” błąd. W wierszu poleceń wykonam następujące polecenie przed połączeniem.

sudo chown root:lpadmin /dev/usb/lp0 

Czy jest lepszy sposób to zrobić?

+3

To powinno działać poprawnie poprzez 'system'. Czy możesz rozwinąć "nie działa"? –

+1

Pokaż, co próbujesz. –

+2

Co jest złego w otwieraniu 2 plików i czytaniu z jednego i pisaniu do drugiego? –

Odpowiedz

2

Chociaż nie ma powodu, aby Twój kod nie działał, prawdopodobnie nie jest to sposób, w jaki chcesz to zrobić. Jeśli chcesz tylko uruchamiać polecenia powłoki, bash jest znacznie lepszy niż python. Z drugiej strony, jeśli chcesz używać Pythona, istnieją lepsze sposoby kopiowania plików niż przekierowanie powłoki.

Najprościej skopiować jeden plik do drugiego jest użycie shutil:

shutil.copyfile('file.txt', '/dev/usb/lp0') 

(oczywiście jeśli masz uprawnienia problemy, które uniemożliwiają przekierowanie z pracy, będziesz mieć takie same uprawnienia problemy z kopiowaniem.)


Potrzebujesz programu, który odczytuje dane wejściowe z klawiatury, a kiedy dostanie jakieś dane wejściowe, wydrukuje określony plik. To proste:

import shutil 

while True: 
    line = raw_input() # or just input() if you're on Python 3.x 
    if line == 'certain input': 
     shutil.copyfile('file.txt', '/dev/usb/lp0') 

Oczywiście prawdziwy program będzie nieco bardziej skomplikowana-it'll robić różne rzeczy z różnych poleceń, a może przyjąć argumenty, które mówią to który plik do wydrukowania, i tak dalej. Jeśli chcesz iść w ten sposób, moduł cmd jest bardzo pomocny.

+0

Chciałbym, aby program uruchamiał polecenia powłoki, gdy zareaguje na pewne dane wejściowe. Czy bash będzie nadal lepszy od pythona? – user2125538

+0

@ user2125538: Jeśli wyraźnie chcesz "uruchamiać polecenia powłoki" zamiast "robić pewne rzeczy", to może tak być. Ale nie wiedząc więcej o tym, co faktycznie próbujesz zbudować, trudno powiedzieć. – abarnert

+0

Aby krótko wyjaśnić, chciałbym, aby program, który odczytuje dane wejściowe z klawiatury, wysyła plik do drukarki w określonej lokalizacji. – user2125538

0

Pamiętaj, że w systemie UNIX wszystko jest plikiem. Nawet urządzenia.

Można więc po prostu użyć podstawowych metod plików (lub cokolwiek innego, np. Shutil.copyfile) (http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files).

W kodzie przypadku może (tylko sposób) będzie tak:

# Read file.txt 
with open('file.txt', 'r') as content_file: 
    content = content_file.read() 
with open('/dev/usb/lp0', 'w') as target_device: 
    target_device.write(content) 

P. S. Proszę nie używać system() połączenia (lub podobne), aby rozwiązać problem.

+0

Tylko przykład, czyż nie? Próbowałem pokazać kilka sposobów. –

+0

, ale druga nie jest nawet zalecana; pierwszy sposób jest zawsze preferowany – Tshepang

+0

Co to znaczy nie jest zalecane? Czy możesz dostarczyć dowód? Jest to podstawowa operacja we/wy! –

Powiązane problemy