python使用参数上面的两个文件夹调用脚本

时间:2014-08-13 01:24:03

标签: python command-line import

让我们假设文件结构如下。

C:\folder1
       file1.py
       folder2
           folder3
               file3.py

我希望file3.py从命令行运行file1及其参数。我需要导入folder1还是file1?怎么样?如何调用脚本?

我尝试了以下

currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
sys.path.append(os.path.join(currentdir, '../../'))

1 个答案:

答案 0 :(得分:1)

要在Python中运行外部程序,一些常见的选择是subprocess.Popen, subprocess.callos.system

以subprocess.Popen和您的文件夹结构为例,这里是file3.py:

import os
import subprocess

current_dir = os.path.dirname(os.path.realpath(__file__))
target_script = os.path.abspath(os.path.join(current_dir, '..', '..', 'file1.py'))
arg1 = 'test_value'
call_args = ['python', target_script, arg1]
subprocess.Popen(call_args)

以上代码将在子进程中运行file1.py,并将'arg1'传递给它。


更多Pythonic解决方案是:将__init__.py file置于“folder1”,“folder2”和“folder3”下,然后Python将这些目录视为包。

在file1.py中:

import sys

def func1(arg):
    print 'func1 received: %s' % arg

if __name__ == '__main__':
    # better to validate sys.argv here
    func1(sys.argv[1])

通过这种方式,您可以在其他python脚本中导入file1.func1,也可以直接在命令行中运行file1.py.

然后,file3.py:

from ...file1 import func1
# "." means current dir, ".." means one level above, and "..." is 2 levels above

func1('test_value')

要执行file3.py:转到folder1的父文件夹(例如,在您的示例中为C:\),然后执行python -m folder1.folder2.folder3.file3

这个解决方案可能看起来更复杂,但随着您的项目变得更大,组织良好的包结构将受益更多。