當前位置:首頁 » 編程語言 » python調用其他程序

python調用其他程序

發布時間: 2022-04-24 17:49:29

Ⅰ 利用python對外部程序進行操作

代碼如下 復制代碼

object_id_list=[1, 3, 88, 99]
f=open(『mylist』, 「w」)
for id in object_id_list:
f.writelines(str(id))
f.close() #只有輸入這一句之後才會真正寫入到文件中
cat mylist
138899% # 最後有一個%表示沒有換行
>>> object_id_list=[1, 3, 88, 99]
>>> f=open(『mylist』, 「w」)
>>> for id in object_id_list:
… f.writelines(str(id) + 『\n』)

>>> f.close()
➜ ~ cat mylist
1
3
88
99

例子2
代碼如下 復制代碼

def processFile(inputFile, outputFile): #定義一個函數
fin = open(inputFile, 'r') #以讀的方式打開文件
fout = open(outputFile, 'w') #以寫得方式打開文件
for eachLine in fin: #讀取文件的每一行
line = eachLine.strip().decode('utf-8', 'ignore') #去除每行的首位空格,並且將文件編碼轉換成Unicode編碼
outStr = line #我沒對讀入的文本進行處理,只是直接將其輸出到文件
fout.write(outStr.strip().encode('utf-8') + 'n') #去除首位的空格,並轉回到utf-8編碼,然後輸出
fin.close() #關閉文件
fout.close()
processFile('myinputFile.txt', 'myoutputFile.txt') #調用該函數對文件進行處理

注意:1、由於Python能夠很方便的對Unicode編碼進行處理,所以最好先轉換成Unicode編程進行處理;

2、由於讀入文本後進行處理,可能會在文本末尾加上空格,所以寫入文件的時候,最好先用strip()函數清除一下首位的空格;
我使用的是linux環境,程序寫完之後,輸入:python test.py 就能執行該程序了。

讀文件
讀文本文件
input = open('data', 'r')
#第二個參數默認為r
input = open('data')

讀二進制文件
input = open('data', 'rb')

讀取所有內容
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )

讀固定位元組
file_object = open('abinfile', 'rb')
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
finally:
file_object.close( )

讀每行
list_of_all_the_lines = file_object.readlines( )
如果文件是文本文件,還可以直接遍歷文件對象獲取每行:
for line in file_object:
process line

3.寫文件
寫文本文件
output = open('data', 'w')

寫二進制文件
output = open('data', 'wb')

追加寫文件
output = open('data', 'w+')

寫數據
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )

寫入多行
file_object.writelines(list_of_text_strings)
注意,調用writelines寫入多行在性能上會比使用write一次性寫入要高。
在處理日誌文件的時候,常常會遇到這樣的情況:日誌文件巨大,不可能一次性把整個文件讀入到內存中進行處理,例如需要在一台物理內存為 2GB 的機器上處理一個 2GB 的日誌文件,我們可能希望每次只處理其中 200MB 的內容。
在 Python 中,內置的 File 對象直接提供了一個 readlines(sizehint) 函數來完成這樣的事情。以下面的代碼為例:
file = open('test.log', 'r')sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0: position = file.tell() lines = file.readlines(sizehint)
每次調用 readlines(sizehint) 函數,會返回大約 200MB 的數據,而且所返回的必然都是完整的行數據,大多數情況下,返回的數據的位元組數會稍微比 sizehint 指定的值大一點(除最後一次調用 readlines(sizehint) 函數的時候)。通常情況下,Python 會自動將用戶指定的 sizehint 的值調整成內部緩存大小的整數倍。
file在python是一個特殊的類型,它用於在python程序中對外部的文件進行操作。在python中一切都是對象,file也不例外,file有file的方法和屬性。下面先來看如何創建一個file對象:

file(name[, mode[, buffering]])
file()函數用於創建一個file對象,它有一個別名叫open(),可能更形象一些,它們是內置函數。來看看它的參數。它參數都是以字元串的形式傳遞的。name是文件的名字。
mode是打開的模式,可選的值為r w a U,分別代表讀(默認) 寫 添加支持各種換行符的模式。用w或a模式打開文件的話,如果文件不存在,那麼就自動創建。此外,用w模式打開一個已經存在的文件時,原有文件的內容會被清空,因為一開始文件的操作的標記是在文件的開頭的,這時候進行寫操作,無疑會把原有的內容給抹掉。由於歷史的原因,換行符在不同的系統中有不同模式,比如在 unix中是一個n,而在windows中是『rn』,用U模式打開文件,就是支持所有的換行模式,也就說『r』 'n' 'rn'都可表示換行,會有一個tuple用來存貯這個文件中用到過的換行符。不過,雖說換行有多種模式,讀到python中統一用n代替。在模式字元的後面,還可以加上+ b t這兩種標識,分別表示可以對文件同時進行讀寫操作和用二進制模式、文本模式(默認)打開文件。
buffering如果為0表示不進行緩沖;如果為1表示進行「行緩沖「;如果是一個大於1的數表示緩沖區的大小,應該是以位元組為單位的。
file對象有自己的屬性和方法。先來看看file的屬性。

closed #標記文件是否已經關閉,由close()改寫
encoding #文件編碼
mode #打開模式
name #文件名
newlines #文件中用到的換行模式,是一個tuple
softspace #boolean型,一般為0,據說用於print
file的讀寫方法:

F.read([size]) #size為讀取的長度,以byte為單位
F.readline([size])
#讀一行,如果定義了size,有可能返回的只是一行的一部分
F.readlines([size])
#把文件每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過循環調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長,也就是說可能只讀到文件的一部分。
F.write(str)
#把str寫到文件中,write()並不會在str後加上一個換行符
F.writelines(seq)
#把seq的內容全部寫到文件中。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。
file的其他方法:

F.close()
#關閉文件。python會在一個文件不用後自動關閉文件,不過這一功能沒有保證,最好還是養成自己關閉的習慣。如果一個文件在關閉後還對其進行操作會產生ValueError
F.flush()
#把緩沖區的內容寫入硬碟
F.fileno()
#返回一個長整型的」文件標簽「
F.isatty()
#文件是否是一個終端設備文件(unix系統中的)
F.tell()
#返迴文件操作標記的當前位置,以文件的開頭為原點
F.next()
#返回下一行,並將文件操作標記位移到下一行。把一個file用於for ... in file這樣的語句時,就是調用next()函數來實現遍歷的。
F.seek(offset[,whence])
#將文件打操作標記移到offset的位置。這個offset一般是相對於文件的開頭來計算的,一般為正數。但如果提供了whence參數就不一定了,whence可以為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以文件末尾為原點進行計算。需要注意,如果文件以a或a+的模式打開,每次進行寫操作時,文件操作標記會自動返回到文件末尾。
F.truncate([size])
#把文件裁成規定的大小,默認的是裁到當前文件操作標記的位置。如果size比文件的大小還要大,依據系統的不同可能是不改變文件,也可能是用0把文件補到相應的大小,也可能是以一些隨機的內容加上去。

Ⅱ python中3種調用可執行文件.exe的方法

方法一、os.system() 會保存可執行程序中的列印值和主函數的返回值,且會將執行過程中要列印的內容列印出來。

import os

main = "project1.exe"

r_v = os.system(main)

print (r_v )

方法二、commands.getstatusoutput() 會保存可執行程序中的列印值和主函數的返回值,但不會將執行過程中要列印的內容列印出來。

import subprocess

import os

main = "project1.exe"

if os.path.exists(main):

rc,out= subprocess.getstatusoutput(main)

print (rc)

print ('*'*10)

print (out)

方法三、popen() 會保存可執行程序中的列印值,但不會保存主函數的返回值,也但不會將執行過程中要列印的內容列印出來。

import os

main = "project1.exe"

f = os.popen(main)

data = f.readlines()

f.close()

print (data)

另外,上面提到的三種方式,實際上都是在python中執行命令,因此他們不只是用來執行可執行文件,也可以用來執行linux系統中別的指令。

關於python中3種調用可執行文件.exe的方法,環球青藤小編就和大家分享到這里了,學習是永無止境的,學習一項技能更是受益終身,所以,只要肯努力學,什麼時候開始都不晚。如果您還想繼續了解關於python編程的學習方法及素材等內容,可以點擊本站其他文章學習。

Ⅲ python怎麼調用java程序

  • 把java封裝成restful介面,然後python通過遠程調用數據。

  • 使用Pyjnius這個python庫。

#源代碼:github.com/kivy/pyjnius
#文檔:pyjnius.readthedocs.org
#也有其他一些的庫,如JPype或Py4j,它們在設計和可用性方面都不是很好。而使用Jython也不為另一種選擇,因為我們想使用python開發Android項目。
#現在就讓我來告訴你,如何簡單的使用Pyjnius:
>>>fromjniusimportautoclass
>>>Stack=autoclass('java.util.Stack')
>>>stack=Stack()
>>>stack.push('hello')
>>>stack.push('world')
>>>stack.pop()
'world'
>>>stack.pop()
'hello'

Ⅳ python調用另外一個python程序的結果

os.system只是運行,不返回結果。
用commands
import commands
txt = commands.getoutput('ls -al')

Ⅳ 如何讓python調用C和C++代碼

如何讓python調用C和C++代碼

安裝python後,會有一個chm格式的python手冊。要搞明白如何讓python調用C/C++代碼(也就是寫python的 extension),你需要征服手冊中的
<<Extending && embedding>>厚厚的一章。在昨天花了一個小時看地頭暈腦脹,仍然不知道如何寫python的extension後,查閱了一些其他 書籍,最終在<<Python Programming On Win32>>書中找到了教程。
下面記錄一下如何在visual studio 2005中,寫一段C/C++的MessageBox代碼,然後提供後python調用,最後的結果當然是顯示一個MessageBox.
1. 首先要明白的是,所謂的python擴展(也就是你提供給python的c/c++代碼,不一定是c/c++代碼,可以是其他語言寫的代碼)是一個 dll,並且這個dll放在本機python安裝目錄下的DLLs目錄下(譬如我機器上的路徑是:F:\Program Files\Python25\DLLs),假如我們接下來要寫的擴展mole名為mb,python調用的代碼為: import mb
mb.showMsg("Python's really amazing, I kindda love it!")
python怎麼找到我們的mb模塊呢?就是上面說的,我們要生成一個mb.dll,然後拷貝到Dlls目錄下面,為了區別普通的dll和python專用擴展的dll,我們的 mb.dll修改成mb.pyd(python dll)
2. 搭建環境,我們要使用python提供的c頭文件和lib庫來進行擴展的開發。 在vs 2005下點擊菜單 "工具"->"選項", 打開選項對話框,選擇"項目和解決方案->VC++目錄", 然後在右邊"顯示以下內容的目錄"得comboBox上選擇"包含文件」,添加python的include目錄(我的機器上是"F:\Program
Files\Python25\include"),然後選擇庫文件,添加python的libs目錄(我的機器上是"F:\Program Files\Python25\libs")。
既然擴展是一個dll,接下來我們要建立一個「動態鏈接庫」工程,然後開始寫代碼:
#include <python.h> //python.h是包含python一些定義的頭文件,在python的include目錄下 /*
我的python版本是2.5, 因為安裝python後它沒提供debug下的lib庫文件,因此你必須生成release版的dll,
想要生成dll版本的,你要到python官網上自己去下載python源代碼,當然你可以繼續生成release版本的dll,但dll中包含調試信息

*/
#pragma comment(lib, "python25.lib")
//先不管
static PyObject* mb_showMsg(PyObject* self, PyObject *args); /*
如果你的擴展是mb,那麼必須實現一個initmb函數,並且從dll中導出這個函數,但我們在python中調用import mb時,python會去dll里去調用
initmb函數,這個函數告訴python我們有些什麼函數,該怎麼告訴python我們有一個showMsg函數呢?下面詳解 */
//必須extern "C"下,這樣不會在C++編譯器里不會更改掉導出的函數名字,我第一次就犯了這樣的錯誤
extern "C" __declspec(dllexport) void initmb() { /*
當調用mb.showMsg("Python's really amazing, I kindda love it!")時, 相當於你告訴python我有一個showMsg函數,我們怎麼告訴python去調用我們dll里的mb_showMsg函數呢?技巧就是下面的方式, 定義一個字典數據結構,key => showMsg, value =>mb_showMsg,METH_VARARGS是函數調用方式,仔細查手冊吧 */
static PyMethodDef mbMethods[] = { {"showMsg", mb_showMsg, METH_VARARGS},
{NULL, NULL, NULL} /*sentinel,哨兵,用來標識結束*/ };
//告訴python我們的模塊名叫mb, 模塊包含的函數都在mbMethods字典里 PyObject *m = Py_InitMole("mb", mbMethods); } /*
接下來實現核心功能showMsg */
//第一個self參數我們用不著,具體查手冊,第二個參數是python傳給我們的參數,它是一個python的參數tuple
static PyObject* mb_showMsg(PyObject* self, PyObject *args) {
//我們的showMsg函數需要的是一個字元串參數 const char* msg = NULL; /*

調用特殊參數解碼python傳遞給我們的參數,s是string,我們傳遞接收參數的變數地址,
如果你的功能函數需要兩個參數,在PyArg_parseTuple後面繼續添加接受參數的變數地址,
這個函數的原型是類似printf的不定參數的形式
PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...); */
if (!PyArg_ParseTuple(args, "s", &msg)) return NULL;
//調用MB
int r = ::MessageBox(NULL, "hello", "Caption:Form C mole", MB_ICONINFORMATION | MB_OK);
//返回值
return Py_BuildValue("i", r); }
將上面這段混雜著大量注釋的代碼拷貝到你的編輯器里,然後編譯生成mb.dll,修改後綴成mb.pyd,然後拷貝到python的DLLs目錄下,打開idle(python的交互程序),寫入代碼: import mb
mb.showMsg("Python's really amazing, I kindda love it!")
可以看到彈出來一個MessageBox。

Ⅵ 如何調用另一個python文件中的代碼

Python 模塊
模塊讓你能夠有邏輯地組織你的Python代碼段。
把相關的代碼分配到一個 模塊里能讓你的代碼更好用,更易懂。
模塊也是Python對象,具有隨機的名字屬性用來綁定或引用。
簡單地說,模塊就是一個保存了Python代碼的文件。模塊能定義函數,類和變數。模塊里也能包含可執行的代碼。
例子
一個叫做aname的模塊里的Python代碼一般都能在一個叫aname.py的文件中找到。下例是個簡單的模塊support.py。
def print_func( par ):
print "Hello : ", par
return

import 語句
想使用Python源文件,只需在另一個源文件里執行import語句,語法如下:
import mole1[, mole2[,... moleN]

當解釋器遇到import語句,如果模塊在當前的搜索路徑就會被導入。
搜索路徑是一個解釋器會先進行搜索的所有目錄的列表。如想要導入模塊support.py,需要把命令放在腳本的頂端:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 導入模塊
import support

# 現在可以調用模塊里包含的函數了
support.print_func("Zara")

Ⅶ Python調用外部程序問題

為什麼是/而不是\?
\才是windows下的路徑分割符合啊!

借用樓上的
import os
os.system(r'"D:\Program Files\Foxit Software\Foxit reader.exe" abc.pdf')
偶想""是不可缺少的,因為路徑中有空格,否則極容易出錯;對-參數不了解,不發表意見

使用os.system會有幾個問題:
1、os.system會阻塞程序繼續運行(如果是圖形界面,還會把圖形界面搞的沒反應),當然如果需要阻塞,自然不是問題。
2、os.system會打開一個命令行窗口,這是比較討厭的;除非你確實需要顯示這個命令行窗口或者本來就是命令行里運行的。

所以還是建議使用 os.popen,基本語法是一樣的

import os
os.popen(r'"D:\Program Files\Foxit Software\Foxit reader.exe" abc.pdf')

這樣不會出現命令行窗口,不會阻塞程序運行
如果需要阻塞程序運行,可以這樣寫:
os.popen(r'"D:\Program Files\Foxit Software\Foxit reader.exe" abc.pdf').read()

Ⅷ 求助一下,python如何調用另一個py文件

這不就相當於引用自定義的模塊嗎,使用import導入
例如A.py
def draw(p){
....
}
在B.py中引用draw,假設A,B文件同目錄
from A import draw
draw(param)

Ⅸ python怎麼調用exe程序

PLAYER_1 = '"C:\Program Files\Tencent\QQMusic\QQMusic.exe"'
file = r"D:\tmp\trancecontrol-Emotions.mp3"
#方法1:
import subprocess
subprocess.Popen(PLAYER_1 + " " + file); #非阻塞
#subprocess.Popen(PLAYER_1 + " " + file).wati(); #阻塞

#方法2:阻塞
import os
#os.system(PLAYER_1 + " " + file);

Ⅹ python中怎麼調用另一個程序

python中怎麼調用另一個程序?

1、自身函數調用:

自身函數的調用時相當方便的,在定義好了函數以後直接按定義的格式調用即可,出現的錯誤為參數數量不匹配,如:TypeError: func() missing 1 required positional argument: 's',意思為func()函數有一個形式參時但是沒有傳入相對應的實參值。

2、通過包或模塊調用:

通過包或模塊調用相對自身函數調用比較復雜,需要提前導入包或模塊,常用的方法為import 或者from import,導入成功的前提是對應的包或模塊在python路徑之下,可以通過sys.path(sys為系統內置模塊可以直接使用import sys導入)來查看python路徑。以導入第三方包文件requests為例。

3、通過類方法調用:

通過類方法的調用需要在調用之前,實例化一個類對象,通過這個類對象來調用類方法,

注意第三個方法為私有方法,不允許類外部訪問

熱點內容
破解exe加密視頻 發布:2025-05-17 11:23:41 瀏覽:976
我的世界伺服器圈太大了怎麼辦 發布:2025-05-17 11:15:21 瀏覽:614
便宜的免費雲伺服器 發布:2025-05-17 11:08:50 瀏覽:777
中國頂級dhcp解析伺服器地址 發布:2025-05-17 11:06:27 瀏覽:34
php轉義html 發布:2025-05-17 11:04:00 瀏覽:567
鋼筋籠加密區規范 發布:2025-05-17 10:59:50 瀏覽:4
我的世界網易手機版主播伺服器房號 發布:2025-05-17 10:40:59 瀏覽:227
豎編譯 發布:2025-05-17 09:56:08 瀏覽:229
編程畫飛機 發布:2025-05-17 09:54:03 瀏覽:803
手機如何解鎖密碼屏幕鎖怎麼刪除 發布:2025-05-17 09:52:04 瀏覽:125