我有一个Python脚本(在Windows框上),该脚本在同一Windows框上调用.bat文件。现在我正在使用subprocess.check_call(Python 3.5)
该.bat文件使用pLink调用Linux操作系统。
pLink使用SSH和-batch命令堆栈,从而导致执行Shell脚本
我需要一种等待外壳脚本完成的方法。
我曾尝试在plink cmds,-N,不同的Python方法(popen,call,check_call,在输出文件名上为true等)上进行睡眠,但是没有成功。现在,由于脚本仍在运行,它完成了整个过程,并以0卷上载了预期的输出文件。
任何帮助将不胜感激,我已经在此上花费了太多时间。
答案 0 :(得分:0)
成功。 Linux机器上的shell脚本使用专有的Java执行器JAR文件来执行作业。该执行程序有一个选项-w wait。一旦我实现一切正常。
以下是FME ETL工具内部代码流的摘要
Python
import fme
import fmeobjects
import subprocess
from subprocess import Popen, PIPE, check_call
import os
import time
def dosomething(feature):
try:
subprocess.check_call("X:\\scripts\\gis\\Geocode\\gc\\exec_gc " + feature.getAttribute('INPUT_FILE_NM') + " " + feature.getAttribute('OUTPUT_FILE_NM'), shell=True, stdin=open(os.devnull) )
except subprocess.CalledProcessError:
raise fmeobjects.FMEException('Geocoder Error')
BAT文件:
plink -ssh userid@linuxbox -pw secret -batch "sudo su - specialuserid; cd ../../opt/dir2/scripts; ./Dynamic_GC_Job.ksh %1 %2; exit"