2017-08-15 3 views
1

私は別のコンピュータで動作するはずのGUIを作っています。スクリプトでは、外部プログラムを開いてこのプログラムを通してマクロを実行する必要があります。私はサブプロセスを使用しています。問題は、パスをハードコーディングしないと、プログラムを見つけることができないということです。プログラムが異なるコンピュータ上の異なるディレクトリにある可能性があるため、パスをハードコードできません。これは可能ですか?パスをハードコーディングせずに外部プログラムを開始

コード:

from subprocess import * 

def call_dos(self, program, *args): 

    proc = call([program, args]) 
    if proc: 
     logging.warning('Calling failed') 
    else: 
     logging.info('Calling successful') 

def partone(self, *args): 
    try: 
     self.call_dos("Myprogram.exe", r"C:\Mymacro.mko") 
    finally: 
     self.partone() 

エラーメッセージ:

Traceback: 
    'Calling failed' 

は、任意の回答ありがとうございます!

+0

要件: '' Myprogram.exe ''はシステムパスになければなりません。これは、任意のpythonの質問とは無関係です。 –

答えて

1

Myprogram.exeが呼び出し可能であること、つまりシステムパスにあることを確認する必要があります。

ウィンドウの場合、exeが置かれている実際のディレクトリを追加することによって、ユーザー環境またはシステム環境に設定してください。PATH環境変数。 (また、あなたのスクリプトと一緒にプログラムを配布することができます

import distutils.spawn 
if not distutils.spawn.find_executable("Myprogram.exe"): 
    raise Exception("{} is not in the path, add it to path and retry".format("Myprogram.exe")) 

は、エラーが人間が読めるように、あなたがチェックを追加することができ、ユーザーは自分の悪いインストール用のプログラムを非難していないことを確認します同じディレクトリ)、それが見つかったと確信しています(深いインストールが必要ない場合)。その場合、次のようにしてください:

self.call_dos(os.path.join(os.path.dirname(__file__),"Myprogram.exe"), r"C:\Mymacro.mko") 
関連する問題