0

これを実行しようとすると、「ファイルが見つかりません」というエラーが表示され続けます。絶対パスを見つけて割り当てないのはなぜですか? これが私のコードです:

    file = "/" + arr[2] + ".exe"
    print(file)
    path = os.path.abspath(file)
    print(path)
    subprocess.Popen(path)
    localtime = time.asctime(time.localtime(time.time()))
    print(arr[2] + " opened at " + localtime + "\n")

出力される内容は次のとおりです。

/firefox.exe
C:\firefox.exe
Traceback (most recent call last):
File "C:\Python33\lib\subprocess.py", line 1090, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

ユーザー入力に基づいて開いているプログラムをプログラムで見つけようとしています...間違った方法で行っているのかもしれませんが、これは誰かがそれを行うことを提案した方法です。Firefox.exe は C:/Program Files/Firefox/firefox.exe にあります。

どんな助けでも素晴らしいでしょう!ありがとう!

4

2 に答える 2

3

Windowsでプログラムを開こうとするための1つの解決策は、C:/ Program files /およびC:/ Program Files(x86)のベースディレクトリから始めて、すべてのフォルダを検索することです。これに対する簡単な解決策は、次のようなものです。

for program_files in (os.path.join("C:", "Program\ Files"), os.path.join("C:", "Program\ Files\ (x86)"):
    for dir in os.listdir(program_files):
        if os.path.exists(os.path.join(program_files, dir, arr[2]) + ".exe"):
            subprocess.Popen(os.path.join(program_files, dir, arr[2]) + ".exe")

これは、プログラムファイルディレクトリに1つのディレクトリをたどるだけですが、少なくとも何をする必要があるかについての要点を示し、ほとんどの場合に簡単な解決策を提供する必要があります。ほとんどのプログラムは、実行可能ファイルを最初のディレクトリの下に保持する傾向があると思います。

簡単な補足として:32ビットバージョンと64ビットバージョンの両方のWindowsで実行できるアプリケーションを作成している場合は、Program Files(x86)ディレクトリの存在を確認するか、 32ビットと64ビットのWindows。そのフォルダは、64ビットバージョンのWindowsにのみ存在します。

また、メソッドが機能しなかった理由は、/ firefox.exeのabspathを取得していたためです。これは、Unixシステムでは、コンピューターの最下位ディレクトリを意味します。Windowsでは、それはC:/になります。Pythonは通常、非常にUnixのように機能するため、システムのルートディレクトリが必要であると想定しています。

于 2012-10-30T03:19:14.693 に答える
0

パスを取得したら、これがプログラムを起動する方法ですが、ファイル ウォーキング/検索アルゴリズムはこの質問の範囲外です。

#load this from a setting file later
programDict = {'firefox': r"C:/Program Files/Firefox/firefox.exe"}

if sys.argv[2] in programDict:
    subprocess.Popen(path)
于 2012-10-30T02:40:39.720 に答える