Python - 在shell中运行时与在另一个脚本中运行时不同地解释路径?

时间:2013-01-23 15:02:45

标签: python shell selenium

我遇到一个奇怪的问题,我不太确定如何解决。我有一个Python-selenium脚本,它使用相对路径将结果记录到文本文件中。

以下是设置日志文件的脚本部分:

log_file = './demo-logfiles/log_file_template.txt'
sys.stdout = open('log_file_template.txt', 'a',)

如您所见,它使用文件夹的相对路径。如果我将此脚本运行为: python demo.py firefox MAC,它运行完美,日志文件被发送到正确的文件夹。

如果我从更大的shell脚本中运行这个确切的Python脚本,它会返回'./demo-logfiles/log_file_template.txt'不存在的错误。

我发现如果我将脚本更改为'../demo-logfiles/log_file_template.txt',它可以在更大的shell脚本中运行,但如果我正常运行它就会停止工作。

它可以在一个或另一个中起作用。以不同方式解释相对目录的原因是什么?我不想在Python / shell中运行两个单独的脚本。

原始python脚本位于/blah/blah/DEMO/demo.py目录中,运行它的shell脚本位于/blah/blah/DEMO/demo-autotest/autotest_logger.sh

我已经确认我尝试运行的任何脚本都会出现此问题。我不应该更改原始Python代码以使其适用于shell脚本。我已经在shell脚本中考虑了它,并且它成功运行了该文件。

感谢。

1 个答案:

答案 0 :(得分:2)

术语“相对目录”表示路径相对于某物。您可能认为它与包含路径但不正确的脚本有关。

相对路径是相对于解释脚本的进程的当前目录,即您在其中启动python的文件夹。如果您在shell中,则可以使用echo $PWD

查看当前目录

如果您在python中启动/blah/blah,那么它将成为当前目录,所有相对路径都相对于/blah/blah

请参阅answer of David Hollman了解如何获取当前脚本的路径,然后了解如何构建相对于此的路径。