Python需要什么?单击脚本来访问它自己的模块目录?

时间:2018-04-17 02:55:44

标签: python command-line-interface python-click

如何在我的主目录中的任何位置使用Python Click脚本,并让我的脚本访问模块目录中的配置?

我们说我有一个名为ClickDir的小脚本,它位于我的主目录~/bin中。这是一个简单脚本的树:

.
├── ClickDir
│   ├── config
│   │   └── helloworld_input.txt
│   ├── __init__.py
│   └── scripts
│       ├── clickscript.py
│       └──  __init__.py
├── HelloWorld_output.txt
└── setup.py

这是一个非常无用的脚本。它读取config中的文件,并将此文本与您选择的输入文本文件连接起来。最后,它将HelloWorld_output.txt写入与INPUT文件相同的目录,

Usage: ClickDir [OPTIONS] INPUT

我可以从任何地方调用Click函数,但Click也相对于config/helloworld_input.txt的目录。因此,脚本无法找到配置输入,

FileNotFoundError: [Errno 2] No such file or directory: '../config/helloworld_input.txt'

我需要在Linux和Windows(Anaconda on Win 10)中应用它

更新:

import click
import os
dir_path = os.path.dirname(os.path.realpath("config/helloworld_input"))

#@cli.command()
@click.command()
@click.argument('input', type=click.File('rb'))
@click.option('--saveas', default='HelloWorld.txt', type=click.File('wb'))
def inout(input, saveas):
    with open(dir_path + "/helloworld_input") as conf:
        print(conf.read())
    while True:
        chunk = input.read(1024)
        if not chunk:
            break
        saveas.write(chunk)

我的脚本位于: /home/xtian/Documents.x/Projects/CliTools.d/ClickDir/scripts

我备份了几个目录,并从Projects运行脚本,但不幸的是,下面描述的解决方案只是从调用目录调用 - 与以前一样: FileNotFoundError: [Errno 2] No such file or directory: '/home/xtian/Documents.x/Projects/config/helloworld_input'

2 个答案:

答案 0 :(得分:2)

您可以使用__file__伪变量来查找脚本所在的目录。

dir_path = os.path.dirname(os.path.realpath(__file__))

然后,您可以使用os.path.join撰写数据文件的完整路径

答案 1 :(得分:-1)

您可以使用绝对路径而不是文件的相对路径。例如:~/bin/ClickDir/config/helloworld_input.txt