I'm trying to run a Python program from the command line so I created a batch file like so:
@py.exe C:\MyPythonScripts\program.py%*@pauseThe script should print a simple message, but when I type "program" in the Windows Run program cmd appears for a second and closes itself. What am I doing wrong?.
This is the code:
#!python3def 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)This is my PATH variable:
> 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- So the batch file is called
program.bat?aschipfl– aschipfl2017-03-14 19:49:31 +00:00CommentedMar 14, 2017 at 19:49 - Have a look at my answer in here:stackoverflow.com/questions/54847871/…Jonathan Mallia– Jonathan Mallia2019-07-02 14:18:05 +00:00CommentedJul 2, 2019 at 14:18
3 Answers3
Regarding your batch file, I would suggest perform these changes:
You were missing a space inbetween thepath and the%*, also enclose thepath in quotes to prevent it frombreaking when spaces are in the path
@echo offpy.exe "C:\MyPythonScripts\program.py" %1 %2 %3 %4 %5 %6 %7 %8 %9pause4 Comments
@echo off do and what's the difference between@py.exe and justpy.exe?@ symbol hides the command input, but can be replaced by using@echo off, which prevents you from having to use@ before every command%* doesnot include the path of the batch file, so it is equivalent to%1 %2 %3 ...! Quoting paths is always a good practice and avoids trouble with white-spaces and other special characters, but the main problem here was the missing space between the path and%*...#!"C:\Program Files\Python36\python.exe" or a virtual Unix-style shebang like#!/usr/bin/python3.The problem in your batch file is a missingSPACE:
@rem THERE MUST BE A SPACE:@rem |@rem V@py.exe C:\MyPythonScripts\program.py %*@pauseIn addition, I strongly recommend to put quotation marks around paths in order to avoid trouble with white-spaces and other spacial characters.
Comments
You can do it using the following method :
@ECHO OFFsetlocalset PYTHONPATH=C:\Python35 (you version of python)C:\MyPythonScripts\program.py %1<-- (you you have arg) endlocalComments
Explore related questions
See similar questions with these tags.

