2017-03-14 91 views
0

我試圖運行命令行Python程序,所以我創建一個批處理文件,像這樣:無法從批處理文件來執行Python腳本

@py.exe C:\MyPythonScripts\program.py%* 
@pause 

腳本應該打印一個簡單的信息,但是當我在Windows運行程序cmd中鍵入「程序」出現一秒鐘並關閉自己。我究竟做錯了什麼?。

這是代碼:

#!python3 

def printPicnic(itemsDict,leftWidth,rightWidth): 
    print('PICNIC ITEMS'.center(leftWidth + rightWidth,'-')) 
    for k,v in itemsDict.items(): 
     print(k.ljust(leftWidth,'.') + str(v).rjust(rightWidth)) 

picnicItems = {'sandwiches':4, 'apples': 12, 'cups': 4, 'cookies':8000} 
printPicnic(picnicItems,12,5) 
printPicnic(picnicItems,20,6) 

這是我的PATH變量:

> C:\Program Files (x86)\Common 
> Files\Intel\Shared 
> Files\cpp\bin\Intel64;C:\ProgramData\Oracle\Java\javapath;C:\Program 
> Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files 
> (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS 
> Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program 
> Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program 
> Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files 
> (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files 
> (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files 
> (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files 
> (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files 
> (x86)\Skype\Phone\;C:\Program 
> Files\Java\jdk1.8.0_121\bin;C:\MyPythonScripts;C:\Python34;C:\Program 
> Files (x86)\Common Files\Intel\Shared 
> Files\cpp\bin\Intel64;C:\ProgramData\Oracle\Java\javapath;C:\Program 
> Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files 
> (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS 
> Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program 
> Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program 
> Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files 
> (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files 
> (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files 
> (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files 
> (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files 
> (x86)\Skype\Phone\;C:\Program 
> Files\Java\jdk1.8.0_121\bin;C:\Python34\Scripts 
+0

@ Farhan.K添加了代碼... – Xcecution

+0

那麼批處理文件被稱爲'program.bat'? – aschipfl

回答

2

關於您的批處理文件,我會建議進行以下更改:

你失蹤的空間在path%*之間,還包含path引號以防止它從中斷當空間是路徑

@echo off 
py.exe "C:\MyPythonScripts\program.py" %1 %2 %3 %4 %5 %6 %7 %8 %9 
pause 
+0

我編輯了批處理文件就像在你的答案,現在它的作品!但我不知道爲什麼,我的意思是'@echo off'做了什麼,'@ py.exe'和'py.exe'之間有什麼區別? – Xcecution

+0

@Xcecution「@」符號隱藏命令輸入,但可以使用'@echo off'替換,這樣可以防止在每個命令前使用'@' – samdd

+0

這是錯誤的,'%*'不會*不會*包含批處理文件的路徑,所以它相當於'%1%2%3 ...'!引用路徑總是一種很好的做法,可避免空格和其他特殊字符的問題,但這裏的主要問題是路徑和'%*'之間缺少空格... – aschipfl

0

您可以使用下面的方法去做:

@ECHO OFF 
setlocal 
set PYTHONPATH=C:\Python35 (you version of python) 
C:\MyPythonScripts\program.py %1<-- (you you have arg) 
endlocal 
1

在批處理文件的問題是缺少SPACE

@rem    THERE MUST BE A SPACE: 
@rem         | 
@rem         V 
@py.exe C:\MyPythonScripts\program.py %* 
@pause 

此外,我強烈建議按順序在路徑周圍加上引號以避免與空格和其他空間字符的麻煩。