Pythonosin
① python os.system(command),這樣執行的command命令,和主程序是非同步的嗎
尚未執行完成的情況下,下面的程序不會繼續操作。
看下面的例子即可:
>>> import os
>>> def test():
... print '1111'
... os.system('ping 127.0.0.1')
... print '2222'
... os.system('ping 127.0.0.1')
... print '3333'
...
>>> test()
1111
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
2222
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
3333
>>>
② python--怎麼查看模塊OS里listdir()函數的源代碼,也就是怎麼定義istdir()的代碼
在 python 官網下載 Gzipped source tar ball, 解壓縮後, 會發現 Lib/os.py 文件這行代碼
from posix import *
可是沒有文件叫 posix.py 啊, 到底在那 ? 其實 posix mole 是 builtin 的其中一分子,如下示範:
>>> import sys
>>> print sys.builtin_mole_names
(*__builtin__*, *__main__*, *_ast*, *_codecs*, *_sre*, *_symtable*, *_warnings*, *_weakref*, *errno*, *exceptions*, *gc*, *imp*, *marshal*, *posix*, *pwd*, *signal*, *sys*, *thread*, *zipimport*)
>>>
所以要去 Moles 目錄查找 c 代碼, 你會看見 posixmole.c, 打開它看見這行代碼:
{"listdir", posix_listdir, METH_VARARGS, posix_listdir__doc__},
再尋找上面所得到的 posix_listdir method, 可以找到 listdir 源代碼:
static PyObject *
posix_listdir(PyObject *self, PyObject *args)
{
/* XXX Should redo this putting the (now four) versions of opendir
in separate files instead of having them all here... */
#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
PyObject *d, *v;
HANDLE hFindFile;
BOOL result;
③ python os.listdir('.')是什麼意思
'.'是指你執行命令時的路徑。
比如你在a目錄執行C:\a>python c:/b/c.py文件,c文件在b目錄下。'.'是把你a目錄下的文件目錄列出來而不是b目錄下的。
import os
print('hahaha==',[d for d in os.listdir('.')])
你自己試一下就知道了。
④ python os 不能輸出中文 window idle版本 在線等
printos.path.join(path,filename).decode('gbk')
⑤ python中for filelist in os.listdir(path) 報WindowsError: [Error 234] :
我這邊試了一下,基本上所有的文件都能成功顯示,包括名字特長的和包含中文字元的,錯誤信息能多貼點么
⑥ python 中os主要實現什麼功能
將data_hoted(數組形式)寫入文本
num_rows, num_cols = shape(data_hoted)
print '寫入文本'
f = open("G:/one_hoted.txt", "w")
for i in range(num_rows):
print >>f, data_hoted[i,:]
f.close()
print '寫入文本完成'
⑦ 想在python腳本裡面source .profile,調用os.system後在當前運行的腳本里環境變數沒有變呢求解決方法。
因為你調用os.system執行source .profile命令是在子進程中進行的,不能改變python當前進程的環境變數。
你應該修改os.environ。
一個mapping對象表示環境。例如,os.environ['HOME'] ,表示的你自己home文件夾的路徑(某些平台支持,windows不支持)
,它與C中的getenv("HOME")一致。
⑧ python os.putenv安全嗎
>>>> os.getenv("PATH")
> '/usr/joebin:/usr/local/bin:/usr/bin:/bin:/usr/games/bin:/usr/sbin:/sbin:~/bin'
>>>> os.putenv("PATH", "/")
>>>> os.getenv("PATH")
> '/usr/joebin:/usr/local/bin:/usr/bin:/bin:/usr/games/bin:/usr/sbin:/sbin:~/bin'
>
>
>>>> os.getenv("FOO")
>>>> os.putenv("FOO", "BAR")
>>>> os.getenv("FOO")
從上述我們不難看出putenv() 無效。
查看幫助,搜索了下:
Quoting (retyping) from the getenv docs, "...however, calls to putenv()
don't update os.environ, so it is actually preferable to assign to items
of os.environ."
調用putenv()無法更新os.environ
As to why, I'm not at all sure. Only that many environments don't
support putenv(). But why that should stop it working in the obvious
way ? No idea.
os.environ is not an ordinary dict, it's a "mapping object". And among
other things, when you modify os.environ, Python will call putenv.
Quoting from the os.environ docs, "If the platform supports the putenv()
function, this mapping may be used to modify the environment. putenv()
will be called automatically wehn the mapping is modified."
#當我們更新os.environ的時候,會自動調用putenv()
In other words, you shouldn't use putenv(), but instead modify os.environ.
#因此我們可以不用putenv了,以更新os.environ來實現調用putenv
⑨ python 的os.listdir(filepath) 什麼意思
In [13]: import os
In [14]: os.listdir('圖片')
Out[14]:
['中華田園犬.jpg',
'2019-08-25 14-34-30 的屏幕截圖.png',
'2019-07-30 09-02-00 的屏幕截圖.png',
'2019-07-12 07-17-12 的屏幕截圖.png',
'2019-07-29 09-49-59 的屏幕截圖.png',
'2019-08-03 17-22-45 的屏幕截圖.png',
'2019-09-22 13-50-52 的屏幕截圖.png',
'2019-08-17 13-39-49 的屏幕截圖.png',
'2019-09-14 10-37-03 的屏幕截圖.png',
'2019-07-12 07-17-16 的屏幕截圖.png',
'2019-08-03 11-10-41 的屏幕截圖.png',
'2019-08-17 14-00-00 的屏幕截圖.png',
'2020-03-24 10-58-28 的屏幕截圖.png',
'2019-08-24 15-47-16 的屏幕截圖.png']
以上為用ipython的嘗試結果,說明,這個是用來展示目標文件夾裡面情況的
⑩ python os和sys模塊的區別
首先,我對 os.exit 這個用法表示驚訝,於是親自嘗試了一下:
>>> print sys.version
2.7.3 (default, Jul 24 2013, 00:50:10)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)]
>>> import os
>>> os.exit
Traceback (most recent call last):
File "<string>", line 1, in <mole>
AttributeError: 'mole' object has no attribute 'exit'
>>>
WTF?os.exit 根本就不存在呀!如果這個用法真的存在,請在評論區里指正。謝謝
比如說,os.path.split、os.system等,這些都是在和OS交互。值得注意的,os.fork只在*nix上可用,這也說明了「os模塊負責與操作系統的交互」。
至於sys呢,sys.exit讓解釋器停止你的程序、sys.version獲得python解釋器(而非操作系統)的版本號、sys.argv獲得你的程序的參數……所以說sys是與解釋器高度相關的。
綜上,題主你「os連接操作系統、sys連接解釋器」的說法很對。我不知道題主哪裡不能理解它們的區別,你可以在評論區說出來。
<del>【本段存在重大技術錯誤已經宣布召回】至於題主說的path,我個人理解是這樣的:
你說path和os肯定有關系吧,path和python解釋器也有關系呀:你的程序能import哪些模塊就取決於path。guido想了半天,實在不知道應該把path放在os里還是sys里,於是乾脆在os和sys里都放了一個path。</del>
剛意識到自己腦殘了,os.path和sys.path明明是完全不同的兩個東西啊!sys.path是人民群眾喜聞樂見的PATH環境變數,os.path是一個mole,提供split、join、basename等「處理目錄、文件名」的工具。