2013-03-02 20 views
5

を印刷するためのPythonでcatコマンドを使用して、私は私が理解から、次のコマンドLinuxカーネルでは

cat file.txt > /dev/usb/lp0 

を使用してファイルをプリンタに送信することができ、これは印刷にfile.txtを内のコンテンツをリダイレクトロケーション。私は、このコマンドは、同じことを達成するだろうと思った次のコマンド

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

を使用してみましたが、それは私に、「アクセス許可が拒否されました」エラーが発生しました。コマンドラインでは、連結する前に次のコマンドを実行します。

sudo chown root:lpadmin /dev/usb/lp0 

これを行うより良い方法はありますか?

+3

これは 'system'によってうまく動作するはずです。あなたは "うまくいきませんでした"ということを詳しく説明できますか? –

+1

あなたが試したことを示してください。 –

+2

2つのファイルを開き、1つのファイルを読み込んで別のファイルに書き込むと何が問題になりますか? –

答えて

2

コードが機能しない理由はありませんが、これはおそらくこれを行う方法ではありません。シェルコマンドを実行したいだけなら、bashpythonよりはるかに優れています。一方、Pythonを使いたい場合は、シェルのリダイレクトよりもファイルをコピーするほうが良い方法があります。

別のファイルをコピーする最も簡単な方法は、shutilを使用することです:

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

(あなたが働いてからリダイレクト防止のアクセス許可の問題がある場合はもちろん、あなたがコピーと同じアクセス許可の問題があるでしょう。 )


キーボードからの入力を読み取るプログラムが必要です。入力があると、特定のファイルが印刷されます。それは簡単です:

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') 

明らかに実際のプログラムは、もう少し複雑な-it'llになりますように別のコマンドと異なることを行う、そして多分、印刷するファイルにそれを伝えるの引数を取り、そして。そのようにしたい場合は、cmdモジュールが大きな助けになります。

+0

特定の入力に応答すると、プログラムはシェルコマンドを実行します。このためにbashはまだPythonより優れているでしょうか? – user2125538

+0

@ user2125538: "do some stuff"ではなく "shell commands"を明示的に実行したい場合は、そうかもしれません。しかし、あなたが実際に何を構築しようとしているかについてもっと知ることなく、言うことは非常に難しいです。 – abarnert

+0

簡単に説明すると、キーボードから特定の入力を読み込んだ後、特定の場所にあるファイルをプリンタに送信するプログラムがあります。 – user2125538

0

UNIXではすべてがファイルです。デバイスでさえも。

したがって、基本(またはその他のもの、例えば、shutil.copyfile)のファイルメソッド(http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files)を使用できます。あなたのケースコード

(だけの方法はそのようなことがあります。

# 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.てください、あなたの問題を解決するためのシステム()の呼び出し(または類似)を使用しないでください。

+0

ただの例ですね。いくつかの方法を示してみました。 –

+0

でも、2番目のものはお勧めできません。最初の方法はいつも優先されます – Tshepang

+0

お勧めはありませんか?あなたは証拠を提供できますか?これは基本的なI/O操作です。 –

関連する問題