python ssh 运行带后面&的程序
2012-11-19 11:28
573 查看
相信这个问题很多人都遇到过
从A机器执行remote shell 运行B机器上 python *** &
在B机器本机执行 python *** & 是需要再按一次回车的
这个时候,如果从A 远程执行shell命令,那么会一直被阻塞住,所以需要模拟一个回车的信号.
但是我折腾了半天也没有搞定怎么在命令的最后加一个回车.
最后找到一个办法,用subprocess去执行.\ (采用新起子进程的方式去执行这个shell,并且通过管道来获取该子进程的标准输入输出和err)
函数说明:
Using the subprocess module
===========================
This module defines one class called Popen:
class Popen(args, bufsize=0, executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=False, shell=False,
cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0):
Arguments are:
args should be a string, or a sequence of program arguments. The
program to execute is normally the first item in the args sequence or
string, but can be explicitly set by using the executable argument.
On UNIX, with shell=False (default): In this case, the Popen class
uses os.execvp() to execute the child program. args should normally
be a sequence. A string will be treated as a sequence with the string
as the only item (the program to execute).
On UNIX, with shell=True: If args is a string, it specifies the
command string to execute through the shell. If args is a sequence,
the first item specifies the command string, and any additional items
will be treated as additional shell arguments.
On Windows: the Popen class uses CreateProcess() to execute the child
program, which operates on strings. If args is a sequence, it will be
converted to a string using the list2cmdline method. Please note that
not all MS Windows applications interpret the command line the same
way: The list2cmdline is designed for applications using the same
rules as the MS C runtime.
bufsize, if given, has the same meaning as the corresponding argument
to the built-in open() function: 0 means unbuffered, 1 means line
buffered, any other positive value means use a buffer of
(approximately) that size. A negative bufsize means to use the system
default, which usually means fully buffered. The default value for
bufsize is 0 (unbuffered).
stdin, stdout and stderr specify the executed programs' standard
input, standard output and standard error file handles, respectively.
Valid values are PIPE, an existing file descriptor (a positiveinteger),
an existing file object, and None. PIPE indicates that a
new pipe to the child should be created. With None, no redirection
will occur; the child's file handles will be inherited from the
parent. Additionally, stderr can be STDOUT, which indicates that the
stderr data from the applications should be captured into the same
file handle as for stdout.
If preexec_fn is set to a callable object, this object will be called
in the child process just before the child is executed.
If close_fds is true, all file descriptors except 0, 1 and 2 will be
closed before the child process is executed.
if shell is true, the specified command will be executed through the
shell.
If cwd is not None, the current directory will be changed to cwd
before the child is executed.
If env is not None, it defines the environment variables for the new
process.
If universal_newlines is true, the file objects stdout and stderr are
opened as a text files, but lines may be terminated by any of '\n',
the Unix end-of-line convention, '\r', the Macintosh convention or
'\r\n', the Windows convention. All of these external representations
are seen as '\n' by the Python program. Note: This feature is only
available if Python is built with universal newline support (the
default). Also, the newlines attribute of the file objects stdout,
stdin and stderr are not updated by the communicate() method.
The startupinfo and creationflags, if given, will be passed to the
underlying CreateProcess() function. They can specify things such as
appearance of the main window and priority for the new process.
(Windows only)
从A机器执行remote shell 运行B机器上 python *** &
在B机器本机执行 python *** & 是需要再按一次回车的
这个时候,如果从A 远程执行shell命令,那么会一直被阻塞住,所以需要模拟一个回车的信号.
但是我折腾了半天也没有搞定怎么在命令的最后加一个回车.
最后找到一个办法,用subprocess去执行.\ (采用新起子进程的方式去执行这个shell,并且通过管道来获取该子进程的标准输入输出和err)
subprocess.Popen("python2.7 /home/qa/projects/RDS_PROXY/perf-test/agent/node.py -t %s --filename=%s --module=%s &"%(taskid,filename,module), shell =True, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
函数说明:
Using the subprocess module
===========================
This module defines one class called Popen:
class Popen(args, bufsize=0, executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=False, shell=False,
cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0):
Arguments are:
args should be a string, or a sequence of program arguments. The
program to execute is normally the first item in the args sequence or
string, but can be explicitly set by using the executable argument.
On UNIX, with shell=False (default): In this case, the Popen class
uses os.execvp() to execute the child program. args should normally
be a sequence. A string will be treated as a sequence with the string
as the only item (the program to execute).
On UNIX, with shell=True: If args is a string, it specifies the
command string to execute through the shell. If args is a sequence,
the first item specifies the command string, and any additional items
will be treated as additional shell arguments.
On Windows: the Popen class uses CreateProcess() to execute the child
program, which operates on strings. If args is a sequence, it will be
converted to a string using the list2cmdline method. Please note that
not all MS Windows applications interpret the command line the same
way: The list2cmdline is designed for applications using the same
rules as the MS C runtime.
bufsize, if given, has the same meaning as the corresponding argument
to the built-in open() function: 0 means unbuffered, 1 means line
buffered, any other positive value means use a buffer of
(approximately) that size. A negative bufsize means to use the system
default, which usually means fully buffered. The default value for
bufsize is 0 (unbuffered).
stdin, stdout and stderr specify the executed programs' standard
input, standard output and standard error file handles, respectively.
Valid values are PIPE, an existing file descriptor (a positiveinteger),
an existing file object, and None. PIPE indicates that a
new pipe to the child should be created. With None, no redirection
will occur; the child's file handles will be inherited from the
parent. Additionally, stderr can be STDOUT, which indicates that the
stderr data from the applications should be captured into the same
file handle as for stdout.
If preexec_fn is set to a callable object, this object will be called
in the child process just before the child is executed.
If close_fds is true, all file descriptors except 0, 1 and 2 will be
closed before the child process is executed.
if shell is true, the specified command will be executed through the
shell.
If cwd is not None, the current directory will be changed to cwd
before the child is executed.
If env is not None, it defines the environment variables for the new
process.
If universal_newlines is true, the file objects stdout and stderr are
opened as a text files, but lines may be terminated by any of '\n',
the Unix end-of-line convention, '\r', the Macintosh convention or
'\r\n', the Windows convention. All of these external representations
are seen as '\n' by the Python program. Note: This feature is only
available if Python is built with universal newline support (the
default). Also, the newlines attribute of the file objects stdout,
stdin and stderr are not updated by the communicate() method.
The startupinfo and creationflags, if given, will be passed to the
underlying CreateProcess() function. They can specify things such as
appearance of the main window and priority for the new process.
(Windows only)
相关文章推荐
- python scrapy 安装 lxml 报 ERROR: 'xslt-config' 不是内部或外部命令,也不是可运行的程序的解决办法。
- 'python'不是内部或外部命令,也不是可运行程序或批处理文件
- Spark认识&环境搭建&运行第一个Spark程序
- eclipse运行android程序提示“Please ensure ..... /sdk/platform-tools/adb' and can be executed”问题的解决
- 终端关闭后程序继续运行 & nohup setip disown jobs
- 使用 SSH 远程连接运行图形界面程序(ubuntu)
- 计算Python的代码块或程序的运行时间
- Python 程序 运行过程
- eclipse运行ssh项目出现"HTTP Status 500 - Unable to instantiate Action"
- Appium+python(1):python运行真机App程序示例
- 谈谈 Python 程序的运行原理
- Linux下SSH远程连接断开后让程序继续运行解决办法
- python程序运行耗时
- VS2005运行程序时出现“没有找到MSVCP80D.dll"错误的解决方法
- 在android手机上运行python程序
- python 程序运行时间
- Express安装提示:'express' 不是内部或外部命令,也不是可运行的程序或批处理文件。
- [zz]在python中运行一个外部程序
- 在python程序中,#后面的语句是表示啥意思
- Python计算程序运行时间