64ビットラップトップでUbuntu 12.04を使用しています。Python コードを使用してアプリケーションを開こうとしています。
import os
os.system("open /home/utsav/ab.txt")
次のエラーが発生します。
「コンソール 256 を参照するファイル記述子を取得できませんでした」
どのコマンドを使用しますか?
64ビットラップトップでUbuntu 12.04を使用しています。Python コードを使用してアプリケーションを開こうとしています。
import os
os.system("open /home/utsav/ab.txt")
次のエラーが発生します。
「コンソール 256 を参照するファイル記述子を取得できませんでした」
どのコマンドを使用しますか?
使用しているコマンド -open
は、実際には man ページで として参照されている別のコマンドopenvt
であり、仮想端末を開きます。
それはあなたがやりたいことだとは思わないので、別のコマンド (gnome-open、xdg-open、geany、gedit、vim、nano など) を使用することをお勧めします。
価値のあることとして、Python 2.7.3 のドキュメントには、os
モジュールは非推奨であり、subprocess
代わりにモジュールを使用する必要があると記載されています。この方法でコマンドを実行するにはsubprocess.call(args, ...)
( 「subprocess モジュールの使用」 ) を使用できます。
以前の回答に基づいて、open
Mac OS X およびgnome-open
Gnome デスクトップ環境を実行している Linux ディストリビューションに使用できます。(確認gnome-open
しxdg-open
たところ、どちらも Fedora 16 で動作します。) Windows は少し扱いにくいです。
Windows の場合は を使用する必要がありstart
ますが、ファイルへのパスまたはファイル名にスペースが含まれていると正しく機能しません。ファイル名を引用しても、完全には修正されません。これstart
は、引用符で囲まれたマークされていない引数がタイトルであると想定しているためです (たとえば、新しいcmd
インターフェイス ウィンドウの場合)。タイトルも開くファイルもマークされた引数ではないため、これは問題です。呼び出しを正しく機能させるには、次のようなことを行う必要がありますstart "DummyTitle" "Filename with spaces.ext"
。
それで、私たちが持っているのは次のとおりです。
Mac OS X:subprocess.call(['open','/path/to/file'])
Gnome DE を実行する Linux:subprocess.call(['gnome-open','/path/to/file'])
ウィンドウズ:subprocess.call(['start','"DummyTitle"','"C:\\Path\\to\\File.ext"'])
またはそのようなもの。
2.7.3 より前のバージョンの Python ではos
、質問で提案したように、これらの引数を文字列として使用してモジュールを使用できます (システム コールのコマンド部分を変更するだけです)。非推奨のルートos.startfile('/path/to/file')
に行く場合は、そのファイルタイプに関連付けられているデフォルトが何であれ、ファイルを開くWindows用があることにも注意してください。os
他のデスクトップ環境を使用して OS でファイルを開く方法はまだ確認されていないことに注意してください。この回答の改善を提案してください!
open
OS-Xで動作し、最終的に使用するubuntuの下で動作しますgnome-open
(k-desktopを使用している場合、対応するコマンドが何であるかわかりません)。
編集
Niklas B. のコメントに基づいて、おそらく も試すことができますxdg-open
。