嗨,我是Python脚本的新手。我试图通过python执行jboss启动shell脚本。shell脚本在直接执行时可以正常工作,但是当试图通过python执行时,它就不能正常工作。我在这里附加了我的shell脚本和python脚本。请帮帮我。在
首先,正在运行的shell脚本--start_jboss.sh
:
#export JAVA_HOME=/opt/appserver/jdk1.7.0_79/
export INSTANCE=jbstd-rss-D04
export JBOSS_HOME=/opt/appserver/JBOSS/jboss-eap-6.4/
export CONF_HOME=/opt/appserver/JBOSS/jbstd-rss-D04/standalone/
export LOGFILEPATH=/opt/logs/jboss/${INSTANCE}
export JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=512m -Xverify:none -
Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -
Dsun.rmi.dgc.server.gcInterval=3600000 -server -XX:+DoEscapeAnalysis -
XX:+UseCompressedOops -XX:+UseParallelGC -XX:+UseParallelOldGC -Xms1024M -
Xmx1024M -verbose:gc -Xloggc:/opt/logs/jboss/${INSTANCE}/gc.log -
XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -
XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=2 -XX:GCLogFileSize=20M"
nohup sh ${JBOSS_HOME}/bin/standalone.sh -
Djboss.server.base.dir=${CONF_HOME} -
Djboss.server.config.dir=$CONF_HOME/configuration/ -c standalone-full-ha.xml
-Djboss.node.name=jbstd-rss-D01
Djavax.net.ssl.trustStore=/opt/appserver/JBOSS/SSL/truststores/truststore.jks -Djavax.net.ssl.trustStorePassword=Was6user1 -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.keyStore=/opt/appserver/JBOSS/SSL/keystores/keystore.jks -Djavax.net.ssl.keyStorePassword=Was6user1 -Djboss.server.log.dir=${LOGFILEPATH} -DlogFilePath=${LOGFILEPATH} -Dorg.jboss.as.logging.per-deployment=false -Djboss.socket.binding.port-offset=300 -DRSS_HOME=/opt/appserver/rss >> /dev/null &
其次,Python包装器start_jboss_service.py
:
…开始如下:
python start_jboss_service.py jbstd-rss-D04
问题一:阻塞子进程输出
您将输出重定向到一个管道,但实际上您永远不会使用该管道中的内容。即使
nohup
在启动后将重定向到/dev/null
,但在该点之前尝试写入的任何内容都将在被消耗的缓冲区上被阻止,从而阻止脚本中在之后尝试写入的任何内容。在您有两种选择:
stdout=subprocess.PIPE
,让脚本直接写入Python进程的原始stdout。在communicate()
对象。在采用前一种方法,您的命令可以简单地变成:
问题二:读取命令行参数
如果运行
python start_jboss_service.py jbstd-rss-D04
,sys.stdin.read()
不会返回jbstd-rss-D04
:这不是在标准输入上传递的,而是在参数列表中传递的。在因此,您需要删除
sys.stdin.read()
行,而不是解析参数列表。在如果接受多个参数,则应将每个实例名称作为单独的参数传递,此时根本不需要使用逗号分隔:
^{pr2}$相关问题 更多 >
编程相关推荐