2017-07-17 7 views
0

私はデバッグしていたコードを、パラメータ。 import.pyファイルをインポートしてsys.argsで実行する必要があります。しかし、私はこれをどのようにすることができますか?実行import.pyは、このラインを持っている

from some_repo.pyflights.usertools import import 

答えて

3

インポートはキーワードであるため、インポートをインポートする方法はありません。プログラムはスクリプトとして実行されている場合、ほとんどのスクリプトはセクション

if __name__ == '__main__': 
    .... 

を持っているので、また、Pythonのファイルをインポートすると、スクリプトを実行しているとは異なり、変数__name__は値__main__を持っています。あなたがサブプロセスを呼び出す準備ができている場合

、あなたが

`subprocess.call(...)` 

編集を使用することができます:それは同じ効果を持ちません。しかし、実際に、あなたはとても

from importlib import import_module 
mod = import_module('import') 

のようなインポートをインポートすることができますスクリプトを呼び出します。このスクリプトではおそらくsys.argvが使用されていることに注意してください。

編集:実際にサブプロセスが必要ない場合に試すことができるersatzはここにあります。私はそれが動作する保証はありません

import shlex 
import sys 
import types 

def run(args): 
    """Runs a python program with arguments within the current process. 

    Arguments: 
     @args: a sequence of arguments, the first one must be the file path to the python program 

    This is not guaranteed to work because the current process and the 
    executed script could modify the python running environment in incompatible ways. 
    """ 
    old_main, sys.modules['__main__'] = sys.modules['__main__'], types.ModuleType('__main__') 
    old_argv, sys.argv = sys.argv, list(args) 
    try: 
     with open(sys.argv[0]) as infile: 
      source = infile.read() 
     exec(source, sys.modules['__main__'].__dict__) 
    except SystemExit as exc: 
     if exc.code: 
      raise RuntimeError('run() failed with code %d' % exc.code) 
    finally: 
     sys.argv, sys.modules['__main__'] = old_argv, old_main 

command = '/home/some_user/some_repo/pyflights/usertools/import.py /home/some_user/some_repo/pyflights/config/index_import.conf flights.map --import' 
run(shlex.split(command)) 
関連する問題