0

I'm trying to execute a batch file using a Python script. Is this possible? The Python script is in a different folder than the batch file. For example, the Python script is in C:\users\me\desktop\python while the batch file is in a folder C:\users\me\desktop\batch. I prefer not to use the full path to the batch file because I want it to work on other people's computer as well (i.e. the C:\users\me part might be different).

This is the script I tried (executed from the "python" folder on desktop)

from subprocess import call

path = "..\batch"
call([path+"\test.bat"])

Result: file not found

3

2 Answers 2

1

Backslash escapes special characters in python. Therefore, the paths that you are creating here are not the ones you think they are:

In [1]: test = "..\bfoo"

In [2]: test
Out[2]: '..\x08foo'

Use raw strings instead:

In [3]: test = r"..\bfoo"

In [4]: test
Out[4]: '..\\bfoo'

And actually, the best way to combine path segments in python is by using os.path.join. This will automatically take care of the backslash vs. slash issues for Unix-lie vs. Windows operating systems.

Sign up to request clarification or add additional context in comments.

9 Comments

Thanks, that worked. However, when I run the Python script, it now shows me the code inside the batch file without actually executing it?
On the command line? Or does it open a new window. However, this is probably actually a different question.
Yes it shows the code on the command line and doesn't open a new window.
When I put the Python script in the same folder as the batch file, it works. But for some reason it doesn't work from a different folder.
Have a look at the marked duplicate question stackoverflow.com/questions/1818774/…. Maybe it solves the issue?
|
0

Use os.path,

import os 

dir_path = os.path.dirname(os.path.realpath(__file__))  # get the full path of the Python file
parent_dir = os.path.dirname(dir_path)

new_path = os.path.join(parent_dir, 'bath', 'test.bat')

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.