def call_returning_exit_and_output(exec_args, **popen_args): def readInputStream(inputStream): reader = BufferedReader(InputStreamReader(inputStream)) builder = StringBuilder() line = None while True: line = reader.readLine() if line is None: break builder.append(line) builder.append(System.getProperty("line.separator")) return builder.toString() # WORKAOUND: because capturing output of Jython's subprocess module at testing with # pytest is not possible using Java implementation pb = ProcessBuilder(exec_args) env = popen_args.get('env') if env: process_env = pb.environment() for key in list(process_env.keySet()): if key not in env: _log.debug("remove from process-env: %s", key) process_env.remove(key) for key in env: process_env.put(key, env[key]) pb.redirectErrorStream(True) process = pb.start() stdout = readInputStream(process.getInputStream()) exitValue = process.waitFor() return exitValue, (stdout, stdout)
def runJob(cmdArray, hosts, sleepTime=60, maxWaits=60, interimResult=None): finished = HashSet() failures = HashSet() pb = ProcessBuilder(cmdArray) done = False # first wait is short in case job finishes quickly waitTime = 10 while not done: p = pb.start() dataOut = DataOutputStream(p.getOutputStream()) try: for host in hosts: dataOut.writeBytes(host + "\n") finally: dataOut.close() p.waitFor() (curFinished, curFailures) = processJobResults(p.getInputStream(), interimResult) finished.addAll(curFinished) failures.addAll(curFailures) done = finished.size() == len(hosts) if not done: maxWaits = maxWaits - 1 done == maxWaits == 0 if not done: time.sleep(waitTime) waitTime = sleepTime return failures
x = chr(x) f.write(x) except: break finally: f.close() print(f.closed) #q = System.getenv() #for k in q.items(): # print (k) #System.getenv("user.dir") import os from java.io import File builder = ProcessBuilder(["python", "prog.py"]) builder.directory(File(os.getcwd())) process = builder.start() x = br1(br(process.getInputStream())) y = bw1(bw(process.getOutputStream())) y.write(10) y.flush() y.close() from java.util import Scanner as S X = S(x) print(X.nextLine()) print(X.nextLine()) t.sleep(5000) print(X.nextLine()) #while x!=-1: # b = x.read() # print (chr(b))