[英]Run selected lines of a Python Script on CMD
我正在使用cmd執行python腳本,並且在使用其他接口時遇到了挑戰,因此只能在CMD上執行。 python腳本具有113行代碼。 我想在執行完整腳本之前運行並測試一些選定的子集代碼行,而不是從父腳本中制作新的python腳本。
從下面的示例(有28行):
要運行父腳本,我們在cmd中說:
C:\Users\X> python myMasterDummyScript.py
我們可以在1-16行之間跑嗎
虛擬示例:
import numpy as np
from six.moves import range
from six.moves import cPickle as pickle
pickle_file = "C:\\A.pickle"
with open(pickle_file, 'rb') as f:
data = pickle.load(f, encoding ='latin1')
train_dataset = data['train_dataset']
test_dataset = data['test_dataset']
valid_dataset = data['valid_dataset']
train_labels = data['train_labels']
test_labels = data['test_labels']
valid_labels = data['valid_labels']
a = 28
b = 1
def reformat(dataset, labels):
dataset = dataset.reshape(-1, a, a, b).astype(np.float32)
labels = (np.arange(10)==labels[:,None]).astype(np.float32)
return dataset, labels
train_dataset, train_labels = reformat(train_dataset, train_labels)
test_dataset, test_labels = reformat(test_dataset, test_labels)
valid_dataset, valid_labels = reformat(valid_dataset, valid_labels)
在諸如PyCharm的解釋器中打開父腳本,然后選擇要執行的行,然后在控制台中右鍵單擊->執行選擇。
理論上只需做一些工作就可以實現,但是請注意,這通常不是腳本的工作方式。 相反,您應該考慮將連貫的例程序列分組為命名函數,然后從命令行調用它們。
除其他問題外,每次移位行號時,您都必須將所有調用代碼修改為腳本,必須重復任何子節可能需要的任何導入操作,通常這不是一個好主意。 不過,在我提出重構理由之后,我仍然要解決這個問題。
您的python腳本:
import numpy as np
from six.moves import range
from six.moves import cPickle as pickle
def load_data()
pickle_file = "C:\\A.pickle"
with open(pickle_file, 'rb') as f:
data = pickle.load(f, encoding ='latin1')
train_dataset = data['train_dataset']
test_dataset = data['test_dataset']
valid_dataset = data['valid_dataset']
train_labels = data['train_labels']
test_labels = data['test_labels']
valid_labels = data['valid_labels']
def main():
a = 28
b = 1
def reformat(dataset, labels):
dataset = dataset.reshape(-1, a, a, b).astype(np.float32)
labels = (np.arange(10)==labels[:,None]).astype(np.float32)
return dataset, labels
train_dataset, train_labels = reformat(train_dataset, train_labels)
test_dataset, test_labels = reformat(test_dataset, test_labels)
valid_dataset, valid_labels = reformat(valid_dataset, valid_labels)
您的cmd代碼如下所示:
REM
REM any logic to identify which function to call
REM
python -c "import myMasterDummyScript; myMasterDummyScript.load_data()"
它還使您可以將cmd中的參數傳遞給函數調用。
現在,如果您真的想從整體python腳本中運行任意行的子集...
cmd將從原始腳本中讀取這些行並將它們寫入臨時腳本。查看批處理腳本的建議答案-逐行讀取 。 略微調整它,而無需過多的錯誤管理(這將大大膨脹此答案):
@echo off
@enabledelayedexpansion
SET startline=$1
SET endline=$2
SET originalscript=$3
SET tempscript=tempscript.py
SET line=1
REM erase tempscript
echo. > %tempscript%
for /f "tokens=*" %%a in (%originalscript%) do (
if %line% GEQ %startline% (
if %line% LEQ %endline% (
echo %%a >> %tempscript%
)
)
set /a line+=1
)
python %tempscript%
pause
您可以這樣稱呼它:
C:\> runlines.cmd 1 16 myMasterDummyScript.py
您可以使用命令行調試器pdb
。 例如,給定以下腳本:
print('1')
print('2')
print('3')
print('4')
print('5')
print('6')
print('7')
print('8')
print('9')
print('10')
print('11')
print('12')
print('13')
print('14')
print('15')
這是一個調試會話,通過跳到第5行僅運行第5-9行,在第10行設置一個斷點,給出了一個清單,以查看要執行的當前行和斷點,並繼續執行。 輸入help
以查看所有可用命令。
C:\>py -m pdb test.py
> c:\test.py(1)<module>()
-> print('1')
(Pdb) jump 5
> c:\test.py(5)<module>()
-> print('5')
(Pdb) b 10
Breakpoint 1 at c:\test.py:10
(Pdb) longlist
1 print('1')
2 print('2')
3 print('3')
4 print('4')
5 -> print('5')
6 print('6')
7 print('7')
8 print('8')
9 print('9')
10 B print('10')
11 print('11')
12 print('12')
13 print('13')
14 print('14')
15 print('15')
(Pdb) cont
5
6
7
8
9
> c:\test.py(10)<module>()
-> print('10')
(Pdb)
選項1-您可以在代碼執行的任何時刻使用調試器來了解所有信息。 ( python -m pdb myscript.py
調試代碼)
選項2-您可以使用腳本片段創建一個主文件和一個子文件,然后導入主腳本並執行該主文件或任何單獨的文件進行測試
選項3-您可以使用參數(例如使用argparse)
我目前沒有更多選擇
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.