假设我有两个模块:
a.py:
import b
print __name__, __file__
Run Code Online (Sandbox Code Playgroud)
b.py:
print __name__, __file__
Run Code Online (Sandbox Code Playgroud)
我运行"a.py"文件.这打印:
b C:\path\to\code\b.py
__main__ C:\path\to\code\a.py
Run Code Online (Sandbox Code Playgroud)
问题:如何__main__从"b.py"库中获取模块的路径(在本例中为"a.py")?
出于某种原因,我的代码无法打开一个简单的文件:
这是代码:
file1 = open('recentlyUpdated.yaml')
Run Code Online (Sandbox Code Playgroud)
错误是:
IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
Run Code Online (Sandbox Code Playgroud)
open()的完整路径,似乎没有任何工作.当我在IDLE中运行以下脚本时
import os
print(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
我输出为
D:\testtool
Run Code Online (Sandbox Code Playgroud)
但是当我从cmd提示符运行时,我得到了
c:\Python33>python D:\testtool\current_dir.py
c:\Python33
Run Code Online (Sandbox Code Playgroud)
我如何获得使用IDLE获得的相同结果?
我知道我可以使用它来获取完整的文件路径
os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)
但是我只想要文件夹的名称,我的脚本就在.如果我有my_script.py并且它位于
/home/user/test/my_script.py
Run Code Online (Sandbox Code Playgroud)
我想回"测试"我怎么能这样做?
谢谢
作为python的新手,我最近才发现通过将__main__.py文件放在文件顶部直接执行.zip文件的能力.这适用于python代码,但是我可以捆绑其他类型的文件并使用我的脚本访问它们吗?如果是这样,怎么样?
我的最终目标是将一些图像文件与python代码捆绑在一个.zip文件中,然后能够在应用程序中使用这些图像而无需将它们提取到磁盘.我还想捆绑版权声明,发行说明等,以便整个应用程序及其数据文件都在单个zip中,可以执行而无需在某处提取.
我试图从一个目录级别进行python导入.
import sys
sys.path.append('..')
from cn_modules import exception
Run Code Online (Sandbox Code Playgroud)
当我尝试运行构建任务时,我从VSCode收到错误:
ImportError:没有名为cn_modules的模块
相同的代码在终端(python)没有任何错误的情况下工作.
当我尝试从VSCode运行构建任务运行它时,我遇到了问题.
这里有什么问题的任何线索?
安静了一段时间,但无法解决这个问题,任何帮助表示赞赏.
注意:当我使用vscode进行调试时,这也适用.下面是我对launch.json和tasks.json的配置
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Console App",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"program": "${file}",
"externalConsole": true,
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit"
],
"env": {},
"envFile": "${workspaceRoot}/.env",
"console":"integratedTerminal",
"pythonPath": "${config:python.pythonPath}"
}
]
}
Run Code Online (Sandbox Code Playgroud)
tasks.json
{
"version": "0.1.0",
"command": "/usr/bin/python",
"isShellCommand": true,
"args": ["${file}"],
"showOutput": "always",
"env": {},
"envFile": "${workspaceRoot}/.env",
"pythonPath": "${config:python.pythonPath}"
}
Run Code Online (Sandbox Code Playgroud) 在Perl中,该FindBin模块用于定位原始脚本的目录.在Python中获取此目录的规范方法是什么?
我见过的一些选项:
os.path.dirname(os.path.realpath(sys.argv[0]))os.path.abspath(os.path.dirname(sys.argv[0]))os.path.abspath(os.path.dirname(__file__))我有一个脚本a.py,在执行它时会向用户询问某些查询并以json格式构造输出.使用python子进程,我可以从另一个名为的脚本调用此脚本b.py.一切都按预期工作,除了我无法获得变量的输出?我在Python 3中这样做.
我试图从另一个Python脚本运行一个Python脚本,并获得它,pid以便我可以在以后杀死它.
我尝试subprocess.Popen()使用父脚本的参数shell=True', but thepid attribute returns thepid`,所以当我尝试杀死子进程时,它会杀死父进程.
这是我的代码:
proc = subprocess.Popen(" python ./script.py", shell=True)
pid_ = proc.pid
.
.
.
# later in my code
os.system('kill -9 %s'%pid_)
#IT KILLS THE PARENT :(
Run Code Online (Sandbox Code Playgroud) 这些在字符串值上是相等的,但它们真的相同吗?怎么回事?
import os
path_name1 = os.path.abspath(os.path.dirname(__file__))
path_name2 = os.path.dirname(os.path.abspath(__file__))
print(path_name1)
print(path_name2)
Run Code Online (Sandbox Code Playgroud) python ×8
python-3.x ×3
file ×2
subprocess ×2
file-io ×1
getcwd ×1
os.path ×1
path ×1
perl ×1
python-2.7 ×1
python-os ×1
vscode-tasks ×1