Ⅰ python3腳本傳參實戰(2個方法3個傳參列表的案例)
在一些測試平台對接時或者用例執行時,或多或少會用到Python腳本傳參的問題。
test.py腳汪敬唯本
#!/usr/bin/python3
import sys
print ('參數個數為:', len(sys.argv), '個參數。')
print ('參數列表:', str(sys.argv))
print ('腳本名:', str(sys.argv[0]))
print ('第一個參數:', sys.argv[1])
執行python3 test.py arg1 arg2 arg3
參數個數為: 4 個參數。
參數列表: ['test.py', 'arg1', 'arg2', 'arg3']
腳本名: test.py
第一個參數: arg1
test.py腳本
#!/usr/bin/python3
import argparse
# 生成了一個命令行參數的對象
parser = argparse.ArgumentParser(description='Test for argparse')
parser.add_argument('--name', '-n', help='name屬性,非必要參數')
parser.add_argument('--year', '-y', help='year 屬性,非必要參數,但有默認值', default=2017)
parser.add_argument('--body', '-b', help='body屬性,必要參數稿鉛', required=True)
args = parser.parse_args()
print (args.year, args.name, args.body)
查看幫助python3 test.py --help
usage: test.py [-h] [--name NAME] [--year YEAR] --body BODY
Test for argparse
optional arguments:
-h, --help show this help message and exit
--name或-n NAME name屬性,非必要參數
--year或-y YEAR year屬性,非必要參數,但有默認值
--body或-b BODY body 屬性,必要參數
執行python3 test.py --year 2021 -n robot --body "are you ok?"
2021 robot are you ok?
以方法2中的test.py腳本為例
python3 test.py --year 2021 --body [\"test\", \"robot\",\"boy\" ]
2021 ["test", "robot", "boy" ]
以方法1中的test.py腳本為例
python3 test.py [\"test\", \"robot\",\"boy\" ]
參數個數為: 2個參數。
參數列表: ['test.py', '[\"test\", \"robot\", \"boy\" ]']
腳本名: test.py
第一個參數: ["test", "robot", "boy" ]
其實此時傳入的第一個參困培數是一個字元,需要轉換為列表。
import json
json.loads(sys.argv[1])
test_arg.py腳本
#!/usr/bin/python3
import argparse
import os
# 生成了一個命令行參數的對象
parser = argparse.ArgumentParser(description='Test for argparse')
parser.add_argument('--body', '-b', help='body屬性,必要參數', required=True)
args = parser.parse_args()
print (args.body)
command=python3 + ' ' + test_sys.py+ ' ' + args.body
print (command)
str=('command')
result=os.system(str)
test_sys.py腳本
#!/usr/bin/python3
import sys
import json
print ('第一個參數:', sys.argv[1])
print ('列表:', json.loads(sys.argv[1]))
執行python3 test_arg.py --body [\"test\", \"robot\",\"boy\" ]
python3 test_sys.py ["test", "robot", "boy" ]
test_sys.py執行報錯,轉json失敗。
還記得我們案例2中,腳本的傳入指定參數和實際傳入參數嘛?
test_arg.py腳本我們稍微優化下,在傳參前先字元替換下。
["test", "robot", "boy" ]轉換為[\"test\", \"robot\",\"boy\" ]即可。
command.replace(' " ' , r ' \" ') 添加到command=之後,再次運行看看呢?
Ⅱ 用python 怎麼和硬體進行鏈接,通信,交互
本文介紹了用python與文件進行交互的方法,分享給大家,具體如下:
一.文件處理
1.介紹
計算機系統:計算機硬體,操作系統,應用程序
應用程序無法直接操作硬體,通過操作系統來操作文件,進而讀/寫硬體中的文件。
python打開文件過程:
#打開
f=open('a.txt','r')
#通過句柄對文件進行操作
read_f=f.read()
#關閉文件
f.close()
with open('a.txt','r') as f: #不需要關閉
f.close() #回收操作系統打開的文件
del f #回收應用程序級的變數
2.打開文件的模式
a.打開文本文件
#r,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
f=open('a.txt',encoding='utf-8')
data1=f.read()
print(f.readline(),end='')
print(f.readlines())
#w,只寫模式【不可讀;不存在則創建;存在則清空內容】
f=open('a.txt','w',encoding='utf-8')
f.write('werf')
#a,只追加寫模式【不可讀;不存在則創建;存在則只追加內容】
f=open('a.txt','a',encoding='utf-8')
f.write('werf\n')
b.對於非文本文件,只能使用b模式,"b"表示以位元組的方式操作(而所有文件也都是以位元組的形式存儲的,使用這種模式無需考慮文本文件的字元編碼、圖片文件的jgp格式、視頻文件的avi格式
with open('1.jpg','rb') as f_read:
data=f_read.read()
print(data)
with open('a.txt','rb') as f_read:
data=f_read.read().decode('utf-8') #解碼
print(data)
with open('a.txt','wb')as f_write:
f_write.write('adsf'.encode('utf-8'))
'''
練習,利用b模式,編寫一個cp工具,要求如下:
1. 既可以拷貝文本又可以拷貝視頻,圖片等文件
2. 用戶一旦參數錯誤,列印命令的正確使用方法,如usage: cp source_file target_file
'''
import sys
if len(sys.argv)!=3:
print('usage:cp source_file target_file')
sys.exit()
source_file,target_file=sys.argv[1],sys.argv[2]
print()
with open(source_file,'rb')as f_read,open(target_file,'wb')as f_write:
for line in f_read:
f_write.write(line)
3.文件內游標的移動
#以文本模式讀文件,n代表的是字元的個數
with open('a.txt','r')as f_read:
data=f_read.read(6)
print(data)
#以b模式讀文件,n代表的是位元組的個數
with open('a.txt','rb')as f_read:
data=f_read.read(6)
print(data)
# tell:告訴當前游標的位置
with open('a.txt','r',encoding='utf-8')as f_read:
data=f_read.read(4)
data1=f_read.tell()
print(data,data1)
# seek:移動游標(0:文件開頭默認;1:文件當前游標;2:文件末尾)
with open('a.txt', 'r', encoding='utf-8')as f_read:
data = f_read.seek(3)
data1 = f_read.read()
print(data, data1)
# 實現tail功能
import time
with open('access.log', 'rb')as f_read:
f_read.seek(0,2)
while True:
line = f_read.readline()
if line:
print(line.decode('utf-8'),end='')
else:
time.sleep(1)
4.文件的修改
import os
with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
for line in read_f:
line=line.replace('alex','SB')
write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
Ⅲ Python 不同腳本之間傳值問題
看你的需求,應該是需要顯示def2被執行。只需要print "def2"就可以了。
你可能理解有些誤差,當py2被執行時,py1的模塊是被導入到py2中,所以對於py2來說,它與py1沒有什麼關系。只是把py1的功能拿來用。拿來後就屬於py2了。只在一個進程里執行,就象是py2自己的一樣。這就是PYTHON的特點。
另外順便說一下。如果你這樣循環執行。幾乎1秒鍾,系統的棧就滿了。很可能執行不下去了。
Ⅳ 如何用python寫個串口通信的程序
打開串口後啟動一個線程來監聽串口數據的進入,有數據時,就做數據的處理。
Ⅳ 如何用python實現串口通信
Python非常適合寫一些測試的腳本,如快速的串口通信測試等。如果使用VC++ QT開發,可能用時較多,使用python,如果掌握使用方法,可以直接讀寫測試,配合設備或是串口助手,很快驗證與實現。
Python有沒有現成的串口API直接調用呢?經過實踐驗證,需要安裝一個叫 Pyserial的組件即可。這個可以在github上下載。
在windows 7 64bit 上可以使用嗎?當然可以使用,我安裝的python3.5為64位的。把下載後的文件,其中有一個serial的文件夾,拷貝到python35安裝路徑, C:\Python35\Lib\site-packages\serial
網上可以搜一下windows的安裝包,安裝完也是:C:\Python35\Lib\site-packages\serial ,可以用最新的版本,替換即可。
測試的方法:在python IDE里測試:
>>> import serial
這里如果報錯,是python版本與pyserial版本沒有配合好。如果正常,不返回,即可以導入serial模塊。
>>> ser=serial.Serial("COM5",115200)
這里為COM5,115200的波特率。如果打不開,請檢查安裝環境。
>>> ser.write('hello,serial test'.encode())
17
發送測試(如果返回位元組數,說明返回成功),這里需要轉換一個編碼為位元組。
以上測試,可以使用現在的設備或是串口助手,如安裝Virtual Serial Port Driver 7.2 虛擬串口軟體,設置一對串口,進行自發自收的測試。
>>> print(ser.readline())
b'abcdefg\r\n'
這里是串口接收,有接收的超時。設備或是串口助手發送一個字元串,以回車換行結束,這里就可以收到列印出來。
也可以用ser.read(),這里只接收一個字元來實現。
上面已經實現了基本的串口操作。
關閉串口為:
>>> ser.close()
如果使用python,一般寫個py文件,就像windows bat 批處理一樣,這是python強大的地方。如果寫一個py腳本呢?其實只要把上面的命令,一條條寫下來,就是一個腳本,測試如下:
import serialser=serial.Serial("COM5",115200,timeout=0.5)for i in range(0,100-1):ser.write('hello\r\n'.encode())print(ser.readline());ser.close()
Ⅵ python伺服器一個客戶端轉發到另一個客戶端
伺服器端創建2個soket對象分別綁定不同的埠用於和A,B連接, 然後將recv到A的數據send給B。
python實現一個客戶端與服務端的通信 Socket對象方法: 服務端: 使用socket函數來創建一個socket對象,並設置一個socket服務。
Python是一種解釋型腳本語言,其在設計上也堅持了清晰劃一的風格,這使得Python成為易讀、易維護的語言。相比於其他語言,Python中的語言語法和語義要簡單得多,而且代碼也具有可讀性。在大多數情況下,為了解決某一特定的問題,Python編寫所需代碼,要比其他流行語言所需的代碼少得多。因此,對於新手來說,Python是一種很容易上手,並便於維護的語言。
Ⅶ 如何在 Python 中進行跨進程跨腳本同步
既然是兩個腳本,想必就是兩個 python 進程了
IPC 的話基本沒有簡單的解決方案= =
基本上簡單的就是文件和埠了吧= =
跨平台的話,像你說的 Windows 有 mutex 的介面,但是 Linux 還有 mmap 呢,不過這兩個都不能算跨平台了