Executing subprocess cannot find specified file on Windows

391 Views Asked by At

I'm working inside a system that has Jython2.5 but I need to be able to call some of Google's apis so I wrote an offline script that I wanted to call from my Jython environment and return to me small pieces of data. Like a JobID or a sheet URL or something from Google.

I've tried a number of things but I always get an error back from Windows, saying that it cannot find the file specified.

Path is done in two ways.

The first way using a string

stringPath = r"‪C:\GooglePipes\Scripts\filetobq.py C:\GooglePipes\Keys\DEV-BigQueryKey.json nofile C:\GooglePipes\BQ_Downtime\TESTFILE.CSV dataset1 table1"

And the second way, as a sequence (per the docs, using shell=false supply a sequence)

seqPath = [r"‪C:\GooglePipes\Scripts\filetobq.py",r"C:\GooglePipes\Keys\DEV-BigQueryKey.json","nofile",r"C:\GooglePipes\BQ_Downtime\TESTFILE.CSV","dataset1","table1"]

Called with

data, err = Popen(seqPath, shell=True, stderr=PIPE, stdout=PIPE).communicate()


#Read values back in
print data
print err

Replacing seqPath with stringPath to try it either way.

I've been at this all weekend, every time I run it I get from Windows

The system cannot find the path specified.

from the err print. I've been unable to debug much further than this. I'm not really sure what's happening. When I paste the stringPath variable directly into my computer's command window it executes.

I've also called subprocess.list2cmdline(seqPath) to see what it's outputting. It's giving me a ? in front of the string, but I haven't been able to figure out what that means. I can paste the rest of the string, starting after the question mark into the command window and it executes.

?C:\GooglePipes\Scripts\filetobq.py C:\GooglePipes...

I've tried a number of different combinations of true and false on shell, passing different args into Popen, double slashes, and I have no less than 30 tabs open from stack overflow and other help forums. I just have no idea what to do at this point and any help is appreciated.

Edit

The ? at the start of the sting is actually a NULL character when I did some additional logging. This seems to be the root of my problem. I can't figure out why it shows up, but it was present in my copy pastes. I started manually typing, and I got it working. When I feed the path with my Jython program it is present again.

1

There are 1 best solutions below

0
Bmo On BEST ANSWER

Ultimately the error was the ?/NULL character.

I went back to the source value where the program was grabbing the path and it was present there. After I hand-re keyed it in, everything started working.

If you copy and paste what I put in the question, you can see the NULL character in the string if you run it through a string->ASCII converter.

>C:
>NULL 67 58 

What a bunch of bullsh***.