使用open()时的Python FileNotFoundError

时间:2016-05-25 17:49:46

标签: python linux command-line

我正在使用var ERP = "yes"; var ERPDate = "2018"; var CRM = "no"; var CRMDate = "2019"; var IDSeq = 1; var datasetlist = ""; var yesCount = 0 //count totalitems if (ERP == "yes") { yesCount = (yesCount + 1); } if (CRM == "yes") { yesCount = (yesCount + 1); } //builddataset if (ERP == "yes"){ if (yesCount == IDSeq) { datasetlist = datasetlist + "{id: " + IDSeq + ", content: \'ERP\', start: \'" + ERPDate + "\'}"; } else { datasetlist = datasetlist + "{id: " + IDSeq + ", content: \'ERP\', start: \'" + ERPDate + "\'},"; } IDSeq = IDSeq +1 } if (CRM == "yes"){ if (yesCount == IDSeq) { datasetlist = datasetlist + "{id: " + IDSeq + ", content: \'CRM\', start: \'" + CRMDate + "\'}"; } else { datasetlist = datasetlist + "{id: " + IDSeq + ", content: \'CRM\', start: \'" + CRMDate + "\'},"; } } //datasetlist = "{id: 1, content: 'ERP', start: '2018'}" //window.alert(datasetlist); // DOM element where the Timeline will be attached var container = document.getElementById('visualization'); // Create a DataSet (allows two way data-binding) var items = new vis.DataSet(datasetlist); // Configuration for the Timeline var options = { height: '500px', start: new Date(2015, 1, 15), end: new Date(2025, 1, 15), timeAxis: {scale: 'year', step: 1} }; // Create a Timeline var timeline = new vis.Timeline(container, items, options); 来读取文件。使用with open('myFile', 'rb') as file:运行程序时一切正常。但是,一旦我尝试在没有python myProgram.py的情况下运行它进入cd目录并使用绝对路径(如myProgram.py我总是收到此错误消息:python /home/myName/myCode/myProgram.py

那么为什么FileNotFoundError: [Errno 2] No such file or directory的行为会有所不同,具体取决于Python程序的启动方式?即使以绝对路径开始,有没有办法使事情有效?

我已经尝试open()但没有成功......

2 个答案:

答案 0 :(得分:3)

  

那么为什么open()的行为会有所不同,具体取决于Python程序的启动方式?即使以绝对路径开始,有没有办法使事情有效?

因为这是标准行为。不仅适用于Python,还适用于所有应用程序(至少我所知道的所有应用程序)。假设相对路径(如'myfile')位于当前目录中。当您从shell启动脚本时,该路径将根据您所在的目录而改变。如果你没有提供绝对路径,那么Python将如何知道在这样的目录结构中使用哪个文件?

root
|-- dir1
|   `-- myFile
`-- dir2
    `-- myFile

您使用open('/home/myName/myCode/myfile', 'rb')开启了正确的轨道。

答案 1 :(得分:0)

假设您运行pwd并返回/home/myName。如果您随后运行/home/myName/code/myProgram.py,则程序的工作目录 not /home/myName/code;它是/home/myName。从父进程继承的进程的工作目录,不是根据脚本所在的位置设置的。