不同意的sys.path和os.getcwd()?

时间:2017-06-14 01:43:58

标签: python python-3.x path sys

我的当前目录下有一个名为sub/code.py的python脚本。 sub目录包含其他脚本和__init__.py,因此它充当包。

从我目前的目录:

python -i sub/code.py
>>> import sys
>>> sys.path[0]
'/home/name/folder/current_directory/sub'
>>> import os
>>> os.getcwd()
'/home/name/folder/current_directory'
>>> 

os.getcwd()sys.path[0]应该以这种方式不同意吗?据我了解,它们都应该引用当前目录,但在这种情况下只有os.getcwd()

3 个答案:

答案 0 :(得分:0)

根据我的经验,sys.path[0]是一个空字符串,它将计算到当前目录。

也许您的sub模块中有代码操纵sys.path

答案 1 :(得分:0)

这并没有真正回答OP的问题。

我发现Mac OSX上from os import getcwd print (getcwd()) 的行为与其所做的相比有所不同。在php。

test_getcwd.py:

Michaels-MacBook-Air:~ michag$ python3 /Users/michag/Documents/aaa_raspbian/ddpos_ddpi_3/boot/test_getcwd.py
/Users/michag

输出当前用户路径,而不是正在运行的脚本的路径:

<style type="text/css>
    .completionList {
        cursor: pointer:
    }
</style>

<div class="input-group col-sm-8">
  <asp:TextBox ID="txtSearchHandle" runat="server" CssClass="form-control"></asp:TextBox>
  <span class="input-group-btn">
    <asp:Button ID="btn_quickSearch" CssClass="btn btn-info" Text="Quick Add" runat="server" UseSubmitBehavior="false" OnClick="btn_quickSearch_Click" />
  </span>  
</div>
<asp:AutoCompleteExtender ServiceMethod="GetCompletionList" MinimumPrefixLength="2"
CompletionInterval="100" EnableCaching="false" CompletionSetCount="2"
TargetControlID="txtSearchHandle" OnClientPopulated="QuickCarline_Populated"
ID="AutoCompleteExtender2" runat="server" FirstRowSelected = "true" UseContextKey="True"
BehaviorId="AutoEx" CompletionListCssClass="completionList"> 
</asp:AutoCompleteExtender>

其中/ Users / michag等于〜,显然是相同的。

答案 2 :(得分:0)

假设您位于目录/中,该目录包含子目录d,目录d具有一个python文件f.py,如下所示:

import os
import sys

print(f'sys.path[0]: {sys.path[0]}')
print(f'os.getcwd(): {os.getcwd()}')

然后python ./d/f.py将输出:

sys.path[0]: /d
os.getcwd(): /

如果将目录更改为/d(使用cd / d),则python ./f.y将输出:

sys.path[0]: /d
os.getcwd(): /d

从这些结果(在具有python 3.8的Linux Unbuntu上)看来:

  • os.getcwd()输出命令所在的目录 执行并
  • sys.path[0]输出您执行文件所在的目录。

注意:这两个路径似乎都是绝对路径(又称完整路径)。