私はデバッグしていたコードを、パラメータ。 import.py
ファイルをインポートしてsys.argsで実行する必要があります。しかし、私はこれをどのようにすることができますか?実行import.pyは、このラインを持っている
from some_repo.pyflights.usertools import import
私はデバッグしていたコードを、パラメータ。 import.py
ファイルをインポートしてsys.argsで実行する必要があります。しかし、私はこれをどのようにすることができますか?実行import.pyは、このラインを持っている
from some_repo.pyflights.usertools import import
インポートはキーワードであるため、インポートをインポートする方法はありません。プログラムはスクリプトとして実行されている場合、ほとんどのスクリプトはセクション
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))