【问题标题】:Execute sh in subdirectory from main.py script?在 main.py 脚本的子目录中执行 sh?
【发布时间】:2017-06-17 19:05:27
【问题描述】:

我正在尝试做以下事情。 我有一个带有这个目录树的 python 项目:

Project dir
  |
  |___main.py
  |___module
       |
       |__a.py
       |__a.sh

a.py 有一个类,其中包含一个运行脚本的方法:

class A():
    def run():
        os.system('a.sh')

然后a.sh 创建一个文件:

touch a.txt

main.py 实例化一个A 类的对象并调用run()

a = A()
a.run()

当调用main 时,我收到一条错误消息,指出script a.sh is not found。我明白为什么会发生这种情况,这是因为工作目录等于项目根路径,但我怎样才能让它工作,以便创建的文件最终位于根路径中?

我想打电话给main.py 并最终得到这个配置。

Project dir
  |
  |___a.txt
  |___main.py
  |___module
       |
       |__a.py
       |__a.sh

我可以将a.py中对a.sh的调用替换为

os.system('module/a.sh')

它会起作用,但我觉得它不干净。

【问题讨论】:

  • 看起来不干净是什么意思?这就是它所在的目录,所以这就是你告诉它查找的地方。
  • 您可以使用 python 本身创建文本文件。
  • 您可以随时更改 PATH 环境变量,但我个人认为这样会不太干净。

标签: python bash path


【解决方案1】:

a.py 模块中的代码可以提取其所在目录的名称,并在os.system() 调用中使用该名称。这就是我的意思:

文件a.py

import os

class A():
    def run(self):
        my_directory = os.path.dirname(__file__)
        script_path = os.path.join(my_directory, 'a.sh')
        os.system(script_path)

a = A()
a.run()

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多