【发布时间】:2017-06-09 00:13:21
【问题描述】:
在运行交互式会话时,PyCharm 将os.getcwd() 视为我的项目目录。但是,当我从命令行运行我的脚本时,PyCharm 将os.getcwd() 视为脚本的目录。
有没有好的解决方法?这是我尝试过但不喜欢的:
进入运行/编辑配置并手动更改工作目录。我不喜欢这个解决方案,因为我必须为我运行的每个脚本都这样做。
在我的代码中有一行“修复”用于交互式会话的路径,并在从命令行运行之前将其注释掉。这可行,但感觉不对。
有没有办法做到这一点,或者它只是应该的方式?也许我不应该尝试在我的项目中运行随机脚本?
任何见解将不胜感激。
澄清:
- “交互式会话”是指能够在 Python/IPython 控制台中单独运行每一行
- “从命令行运行”是指创建脚本 my_script.py 并运行
python path_to_myscript/my_script.py(实际上我在 PyCharm 上按下了“运行”按钮,但我认为是一样的)。
其他值得一提的事实:
- 我创建了一个 PyCharm 项目。这包含(除其他外)包 Graphs,其中包含模块 Graph 和一些 .txt 文件。当我在我的 Graph 模块中做某事(例如从文件中读取图表)时,我喜欢测试事情是否按预期工作。我通过运行选择的行(以交互方式)来做到这一点。要读取 .txt 文件,我必须(使用
os.path.join())从当前工作目录(项目目录,...\\project_name)到文件所在的模块目录...\\project_name\\Graphs。但是,当我通过命令行运行整个脚本时,读取 .txt 文件的命令会引发错误,抱怨找不到文件。通过查看未找到的文件的名称,我看到完整的文件名是这样的:...\\project_name\\Graphs\\Graphs\\graph1.txt看来这次当前的工作目录是...\\project_name\\Graphs\\,而我的os.path.join()命令居然把它弄坏了。
【问题讨论】:
-
以下两个答案虽然提供了对问题的见解,但没有提供解决方案。你有没有找到一个解决方案,从 Shell 和交互式会话中给出相同的路径?
-
不,不是。如果我必须对它做点什么,那就是包含一行测试如何调用脚本并相应地设置工作目录(即,如果通过命令行运行则没有更改,否则如果以交互方式运行,请将其设置为是项目的目录)。正如我上面所说,这可行,但感觉像是解决问题的业余方式。很高兴看到其他人分享我的问题! :)
标签: python-3.x path pycharm