Python subprocess: 64 bit windows server PIPE doesn't exist :(
Posted
by Spaceman1861
on Stack Overflow
See other posts from Stack Overflow
or by Spaceman1861
Published on 2010-04-06T05:55:35Z
Indexed on
2010/04/06
7:43 UTC
Read the original article
Hit count: 296
I have a GUI that launches selected python scripts and runs it in cmd next to the gui window. I am able to get my launcher to work on my (windows xp 32 bit) laptop but when I upload it to the server(64bit windows iss7) I am running into some issues. The script runs, to my knowledge but spits back no information into the cmd window.
My script is a bit of a Frankenstein that I have hacked and slashed together to get it to work I am fairly certain that this is a very bad example of the subprocess module. Just wondering if i could get a hand :). My question is how do i have to alter my code to work on a 64bit windows server. :)
from Tkinter import *
import pickle,subprocess,errno,time,sys,os
PIPE = subprocess.PIPE
if subprocess.mswindows:
from win32file import ReadFile, WriteFile
from win32pipe import PeekNamedPipe
import msvcrt
else:
import select
import fcntl
def recv_some(p, t=.1, e=1, tr=5, stderr=0):
if tr < 1:
tr = 1
x = time.time()+t
y = []
r = ''
pr = p.recv
if stderr:
pr = p.recv_err
while time.time() < x or r:
r = pr()
if r is None:
if e:
raise Exception(message)
else:
break
elif r:
y.append(r)
else:
time.sleep(max((x-time.time())/tr, 0))
return ''.join(y)
def send_all(p, data):
while len(data):
sent = p.send(data)
if sent is None:
raise Exception(message)
data = buffer(data, sent)
The code above isn't mine
def Run():
print filebox.get(0)
location = filebox.get(0)
location = location.__str__().replace(listbox.get(ANCHOR).__str__(),"")
theTime = time.asctime(time.localtime(time.time()))
lastbox.delete(0, END)
lastbox.insert(END,theTime)
for line in CookieCont:
if listbox.get(ANCHOR) in line and len(line) > 4:
line[4] = theTime
else:
"Fill In the rip Details to record the time"
if __name__ == '__main__':
if sys.platform == 'win32' or sys.platform == 'win64':
shell, commands, tail = ('cmd', ('cd "'+location+'"',listbox.get(ANCHOR).__str__()), '\r\n')
else:
return "Please use contact admin"
a = Popen(shell, stdin=PIPE, stdout=PIPE)
print recv_some(a)
for cmd in commands:
send_all(a, cmd + tail)
print recv_some(a)
send_all(a, 'exit' + tail)
print recv_some(a, e=0)
The Code above is mine :)
© Stack Overflow or respective owner