導航:首頁 > 編程語言 > python參數腳本

python參數腳本

發布時間:2023-04-02 19:54:39

1. python如何在一個腳本修改另一個腳本的參數

一般情況下都是通過衡梁import腳本,然後直接調用腳本里的函數,調用函數就可以如睜直接傳遞參數;因為Python並不像C語言那樣有main函數咐橡運。
import B(腳本名稱)
B.hello(參數A,參數B)

2. python腳本入參的單、雙引號

Linux的shell中存在一些特殊字元(保留字),我們將這些具有一些特殊功能的字元叫做meta(元字元),還有一些普通的,沒有特殊功能的字元我們叫做literal(文字)。bash中,常使用的引用有如下三種方法:

    1、單引號:單引號中的所有meta均被當作普通字元使用。

    2、雙引號:在雙引號中的大部分meta都被當作普通字元,但某些字元的功能保留(如$)。

    3、反斜線:只有緊接在反斜線(跳脫字元)之後的單一meta才被當作普通字元。

Windows的cmd下,同樣也有類似的概念。單引號和雙引號有時候沒有區別(可以使用任意一個),有時候只能用特定的一個。

這篇文章主要記錄python腳本入參帶有&&符號時,在Linux和Windows平台的不同表現。

編寫python腳本quote.py,內容如下:

$ cat quote.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

print(sys.argv[1])

1、參數不使用引號

$ python quote.py whoami&&whoami

whoami

sunday

可以看出,第一個whoami被當作入參傳給腳本,第二個whoami當作bash命令,在終端執行。

2、參數使用單引號

$ python quote.py 'whoami&&whoami'

whoami&&whoami

可以看出,&&被當作普通字元,whoami&&whoami作為參數傳給了腳本。

3、參數使用雙引號

$ python quote.py "whoami&&whoami"

whoami&&whoami

可以看出,&&被當作普通字元,whoami&&whoami作為參數傳給了腳本。

在Windows執行腳本,用戶為winsunday:

1、參數不使用引號

C:\test>python quote.py whoami&&whoami

whoami

winsunday

可以看出,第一個whoami被當作入參傳給腳本,第二個whoami當作CMD命令,在終端執行絕或消。

2、參數使用單引號

C:\test>python quote.py 'whoami&&whoami'

'whoami

'whoami'' 不是內部或外部命令,也不是可運行的程序

或批處理文件。

可以看出,並知單引號被當作普通字元,&&對命團猜令進行了分割,'whoami作為第一個參數被傳給腳本;whoami'被認為是一個命令進行執行(報錯了)。

3、參數使用雙引號

C:\test>python quote.py "whoami&&whoami"

whoami&&whoami

可以看出,雙引號時&&被當作普通字元,whoami&&whoami作為整體被傳給腳本。

3. 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=之後,再次運行看看呢?

4. python 如何調用帶參數的shell腳本

調用帶參數的腳本,需要首先設置,舉例如下:

test.py按行解釋如下:

  1. 腳本中有漢字的話,需要聲明文件編碼格式;

  2. 導入sys模塊,這個模塊是用來獲取參數列表的;

  3. sys.argv是一個列表,第一個是文件名,之後依次是參數列表;

  4. 列印輸出,這一步不需要多講;

  5. 保存到c:usersYYCDesktop est.py;

調用操作步驟:

  1. 打開命令行;

  2. 輸入python 文件名 第一個參數 第二個參數.....(參數之間用空格區分);

  3. 一定要注意參數個數,要以文件名開始。

5. python腳本中調用執行另一個帶參數python腳本的問題

cmd='答禪/home/menglin/androguard/androaxml.py慶舉鏈-i{}|grep"android.permission."'.format(path)
p1=subprocess.Popen(cmd,譽孫stdout=subprocess.PIPE,shell=True)

6. python開發命令行腳本

工作中會經常需要寫一些命令行腳本,如果還是用if,else判斷用戶輸入實在是太醜陋了。這里介紹幾個python里的命令行腳本庫,可以幫助我們快速開發好用的命令行腳本。

https://docs.python.org/3/library/cmd.html

使用方式是繼承Cmd,實現自己的子類。

參數comletekey是自動補全操作,默認值是Tab, 如果不為None 且readline可用的話,命令會自動完成。
這里的readline指的是python實現的 GNU readline 介面(標准python庫里沒有,Windows系統不支持)。

參數stdin,stdout是輸入輸出流,默認是sys.stdin,sys.stout。

cmd提供了一個簡單的框架,但是功能比較簡單,python還有其他的很多第三方庫可以用來寫命令行程序。

https://www.cnblogs.com/xueweihan/p/12293402.html 這篇文章對比了各個庫的功能,貼在這里:

看起來fire是最簡單的,來試一下。

fire 則是用一種面向廣義對象的方式來玩轉命令行,這種對象可以是類、函數、字典、列表等,它更加靈活,也更加簡單。你都不需要定義參數類型,fire 會根據輸入和參數默認值來自動判斷,這無疑進一步簡化了實現過程。

以下示例為 fire 實現的 計算器程序:

從上述示例可以看出,fire 提供的方式無疑是最簡單、並且最 Pythonic 的了。我們只需關注業務邏輯,而命令行參數的定義則和函數參數的定義融為了一體。

不過,有利自然也有弊,比如 nums 並沒有說是什麼類型,也就意味著輸入字元串'abc'也是合法的,這就意味著一個嚴格的命令行程序必須在自己的業務邏輯中來對期望的類型進行約束。

7. Python語言命令行參數解析接收參數執行腳本的三種方法

在Windows系統上,Python腳本文件當然雙擊就能直接運行。不過我們往往需要在執行腳本的時候還要添加相應的參數,另外在Ubuntu系統中,我們執行文件往往和其他系統或用戶命令一樣,需要在終端中輸入,參數當然也要一並加上。所以機智客這里說的意思是,執行Python腳本(.py文件)時候需要輸入相應參數,這樣程序怎麼寫的方法。

上面這么說可能有點不明不白的,或者有朋友會用但未必知道命令行解析這種表達方式。舉個例子,比如我們在執行一個腳本文件的時候,可能會在CMD或者終端中輸入python demo.py 10或者python demo.py --separator 10後面這個數字就是參數。我們要編寫這樣的腳本或者函數,有哪些方法呢?這里列舉三種常用的。

一個是用系統模塊sys。引入模塊語句是import sys。也就是Python語言的內置庫中的sys.argv。argv通常有argv[0],argv[1],argv[2]這樣幾個參數。基本使用方法是m_sil_len = int(sys.argv[1])傳入第一個參數,sil_th = int(sys.argv[2])傳入第二個參數。如果是簡單一點的參數或者腳本,我們引入了sys。可以直接用這個傳入參數。

一種是用模塊argparse來實現,這是標准庫中推薦的命令行解析模塊。引入模塊語句是import argparse。基本使用方法是引入模塊後,先parser = argparse.ArgumentParser()創建對象,然後調用方法添加參數parser.add_argument("jzk", help="這是關於參數的說明", type=int),之後args = parser.parse_args()使用解析就可以用了。機智客看到這個方法在很多項目腳本中使用。我們在閱讀機器學習AI之類的開源項目,就會發現很多人用的都是這個方法。

還有一個就是用fire模塊,用於生成命令行界面的工具。引入模塊語言是import fire。它默認以-為參數分隔符的。基本使用方法是fire.Fire()。這個不僅可以做命令行的參數解析,還可以還給一個類class添加命令行。所以使用時候括弧里填入函數名或者類名即可,也就是裡面的參數可以是其他Python對象。

8. 怎麼在python腳本裡面調用另外一個帶參數的腳本

一般情況下都是通過import腳本,然後直接調用腳本里的函數,調用函數就可以直接傳遞參數;因為Python並不像C語言那樣有main函數。

importB(腳本名稱)
B.hello(參數A,參數B)

9. Windows10 中建立自動執行的python腳本,解決python不產生日誌的問題

問題:按伍游照網上的教程,設置了自動執行的任亮首務,雖然腳本能運行,但是py文件並沒有產生日誌文件。

解決方法:在程序或腳本中 填寫python.exe的絕對地址,我這里填寫的是虛擬環境下的python地址

添加參數 : 這里填寫腳本wind.py的絕對位置

起始於: 填寫的是 日誌產生文件的 位置。

由於我的腳本位置和 日誌產生的位置是一樣的。所以對於文件位置不一樣的可能沒有參考意義腔鍵銷。

下面是運行後的結果:

10. 用Windows的「任務計劃程序」執行Python腳本文件

整個任務計劃設置一路下一步就ok了敬殲,幾乎Xp之後每個版本的Windows設置都是差不多的。稍微提一下, 創建基本任務 創建任務 的區別是一個有引導界面,一個直接彈出設置界面直接設置。

出問題的是在這個界面的設置方法:

這里先引用一段其他文章里的設置方法:

上面的設置里問題還是挺多的,特別是關於 起始於 的解釋。事實上這里的起始於並不是填寫編譯器所在的目錄,編譯器所在的目錄實際上應該是在 程序與腳本 中就已經填寫過了。而這里 起始於 要填寫的內容應該是

同時,我們注意到,這里的選項後面有一個 (可選) ,意思是如果此處不填的話(預設狀態),那麼自動將該處的目錄位置定位到起始執行目錄的位置(在 任務計劃程序 執行的過程中通常是 編譯器所在的目錄位置 )。

其實這個跟python的一個內置模塊有關。
os模塊下我們經常用到的os.getcwd(),用於獲取腳本當前目錄位置;
而os.path.pardir可以獲得當前腳本目錄的上一級目錄。
他們在一般雙擊運行的情況下的輸出為(舉例):
D:Python
..
而當使用編譯器運行python腳本和直接雙擊執行python腳本時,os.getcwd()的輸出結果是不一樣的:
D:Python
C:
換句話說,在使用編譯器執行時(即在cmd中執行 python D:Pythonpath.py ),os.getcwd()取的是python編譯器所在的目錄。 更一般的講 ,os.getcwd()本身這個方法,返回的是當前執行python文件的文件目錄, os.path.pardir同理 。一般情況下,打開腳本時,cmd會自動定位到當前腳本所在位置,類似使用了命令 cd D:Python ,所以執行目錄就在腳本位置,所以輸出 D:Python ;而當用 任務計劃程序 執行時,其本質就是在cmd中將參數拼接,形成 python D:Pythonpath.py 這樣的一條命令來運行程序,所以此時他返回的python的執行文件目錄,就是python的安裝目錄 C: 。

因此我們需要定義 起始於 這個參數來告訴Windows實際的腳本位亮物沖置在哪裡,否則就會出現找不到目標文件的錯誤。如果螞賣腳本中沒有牽涉到類似的目錄位置等情況時(實際情況是這樣的定時腳本大概率會遇到文件輸入輸出問題),此項大可以不填。

現在重新對這里的設置進行總結:

閱讀全文

與python參數腳本相關的資料

熱點內容
哪個app聽音樂最好 瀏覽:279
考研英語2真題pdf 瀏覽:697
煙台編程積木教育環境好不好 瀏覽:214
python優秀代碼 瀏覽:620
androidtop命令 瀏覽:455
你平時怎麼排解壓力 瀏覽:68
表格中的文件夾怎樣設置 瀏覽:476
em78單片機 瀏覽:960
splitjava空格 瀏覽:248
電腦怎麼谷歌伺服器地址 瀏覽:515
nx自定義工具啟動宏命令 瀏覽:101
程序員怎麼解決無法訪問互聯網 瀏覽:303
java訪問本地文件 瀏覽:747
瓦斯琪伺服器怎麼用 瀏覽:22
安卓主題用什麼app 瀏覽:747
修改伺服器pci地址空間 瀏覽:321
程序員將來去哪裡 瀏覽:966
虛幻5創建c無法編譯 瀏覽:189
javaweb項目設計 瀏覽:407
國家反詐app緊急聯系人怎麼填 瀏覽:191