Python 单击脚本访问它自己的模块目录需要什么?
What's required for Python Click script to access it's own module directory?
如何使用 Python 单击主目录中任意位置的脚本,并让我的脚本访问模块目录中的配置?
假设我有一个名为 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(Win 10 上的 Anaconda)中应用它
更新:
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'
您可以使用绝对路径而不是文件的相对路径。例如:~/bin/ClickDir/config/helloworld_input.txt
您可以使用 __file__
伪变量,找到您的脚本所在的目录。
dir_path = os.path.dirname(os.path.realpath(__file__))
然后你可以使用os.path.join
来组成你的数据文件的完整路径
如何使用 Python 单击主目录中任意位置的脚本,并让我的脚本访问模块目录中的配置?
假设我有一个名为 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(Win 10 上的 Anaconda)中应用它
更新:
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'
您可以使用绝对路径而不是文件的相对路径。例如:~/bin/ClickDir/config/helloworld_input.txt
您可以使用 __file__
伪变量,找到您的脚本所在的目录。
dir_path = os.path.dirname(os.path.realpath(__file__))
然后你可以使用os.path.join
来组成你的数据文件的完整路径