2013-02-24 16 views
7

私は、ファイルの拡張子に応じて、メモ帳や画像ビューアなどのプログラムでファイルを開く方法を知っています。私はWindowsでPython 3.3を使用しています。Pythonで外部プログラムでファイルを開くにはどうしたらいいですか?

私はいくつかの研究を行い、人々はImageというモジュールを挙げましたが、このモジュールを試してみると、私はImportErrorを取得します。

は、ここで私がこれまで持っているものです。

def openFile(): 
    fileName = listbox_1.get(ACTIVE) 
    if fileName.endswith(".jpg"): 
     fileName.open() 

私もHTMLと私はメモ帳で開く必要がありますJSONファイルを持っています。

+0

おそらく、使用しているプラ​​ットフォームについて言及する必要があります。 – FatalError

+0

ありがとうinterjay、私が使用できる質問への答えがありました –

答えて

5

使用この既定のプログラムで任意のファイルを開くには:

import os 
def openFile(): 
    fileName = listbox_1.get(ACTIVE) 
    os.system("start " + fileName) 

あなたが本当にメモ帳など、特定のプログラムを使用したい場合、あなたはこのようにそれを行うことができます。

import os 
def openFile(): 
    fileName = listbox_1.get(ACTIVE) 
    os.system("notepad.exe " + fileName) 

また、ファイルを開く前にいくつかのチェックが必要な場合は、自由に追加してください。これは、ファイルを開く方法のみを示しています。

+0

'os.system()'は呼び出しスレッドをブロックします。 'subprocess'モジュールの何かがより適切かもしれません。 – FatalError

+0

特定のプログラムを開いていないjsonなどのファイルで問題が発生するため、プログラム名を追加する必要はありません –

+0

@ LWH91ファイルが '.json'で終わっている場合は、チェックを追加することをお勧めします。カスタムプログラムでファイルを開きます。それ以外の場合は "start"を使用します。 –

4

例を使ってFatalErrorの提案を拡張してください。

subprocessingを使用してではなく、os.systemの1つの追加の利点は、それが同じ構文クロスプラットフォームを使用することである(Windows上のos.systemは、OS Xが必要とし、「開く」に対し、冒頭で「開始」が必要です。未巨大な契約、覚えておくべきことは1つ少ない)。

subprocess.callでファイルを開く。

プログラムを起動するために必要なのは、listの引数で最初にプログラムのパスを指定し、残りの引数はプログラムに追加する引数です打ち上げ

例えば、メモ帳

import subprocess 
import os 


path_to_notepad = 'C:\\Windows\\System32\\notepad.exe' 
path_to_file = 'C:\\Users\\Desktop\\hello.txt' 

subprocess.call([path_to_notepad, path_to_file]) 

複数の引数とパスを渡すが同等に単純で起動します。追加の項目をリストに追加するだけです。複数の引数

これで起動


は、例えば、Javaランタイム環境の特定のコピーを使用してJARファイルを起動します。

import subprocess 
import os 

current_path = os.getcwd() 
subprocess.call([current_path + '/contents/home/bin/java', # Param 1 
        '-jar', #Param2 
        current_path + '/Whoo.jar']) #param3 

引数1は、起動したいプログラムを対象としています。 Argument2は、を提供し、そのプログラムはJARを実行することを通知し、最後にArgument3は、ターゲットプログラムにファイルをどこで見つけるかを指示します。

14

Windowsでは、デフォルトのアプリケーションを使用してファイルを開くためにos.startfile()を使用することができます。

import os 
os.startfile(filename) 

はそれをクロスプラットフォームを行うだろう何のshutil.open()はありません。近似値はwebbrowser.open()です:OS X、Windows上でos.startfile()xdg-openまたはLinux上で同様に自動的にopenコマンドを使用する場合があります

import webbrowser 
webbrowser.open(filename) 

あなたが特定のアプリケーションを実行したい場合、あなたはsubprocess moduleなどを使用することができ、Popen()は、それが完了するのを待たずにプログラムを起動することができます:

import subprocess 

p = subprocess.Popen(["notepad.exe", fileName]) 
# ... do other things while notepad is running 
returncode = p.wait() # wait for notepad to exit 

実行するsubprocessモジュールを使用する多くの方法があります。例えば、subprocess.check_call(command)は、コマンドが終了するまでブロックされ、コマンドがゼロ以外の終了コードで終了すると例外が発生します。

+0

問題はjsonファイルにデフォルトのアプリケーションがないため、どのプログラムを開くべきかをユーザに尋ねるように見えることです。 –

+0

@ LWH91:明示的にプログラムを実行するためのサブプロセスベースのソリューションを追加しました。 – jfs

関連する問題