あなたが望むものは少し奇妙です。正確には、run マジックは、指定されたファイルを現在の ipython 名前空間で__main__
モジュールであるかのように実行します。まったく同じ効果を得るには、少し努力が必要です。
with open("util/file_reader.py") as f:
src = f.read()
# set command line arguments
import sys
sys.argv = ["file_reader.py", "C:/file_address"]
# use "__main__.py" as file name, so module thinks its the main module
code = compile(src, "__main__.py", "exec")
exec(code)
でメイン関数を定義しfile_reader.py
、ファイルの最後でそれを呼び出す方が簡単で優れている場合if __name__ == "__main__":
例えば。
ユーティリティ/file_reader.py
def main(filename):
print(filename)
if __name__ == "__main__":
import sys
main(sys.argv[1])
したがって、このモジュールをインポートしてから関数を呼び出すことで、このモジュールのコードを簡単に実行できますmain
。
例えば。
import util.file_reader
util.file_reader.main("C:/file_address")