我想在子目录/超级目录中执行一个脚本(我需要先在这个子/超级目录中).我无法subprocess
进入我的子目录:
tducin@localhost:~/Projekty/tests/ve$ python
Python 2.7.4 (default, Sep 26 2013, 03:20:26)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> import os
>>> os.getcwd()
'/home/tducin/Projekty/tests/ve'
>>> subprocess.call(['cd ..'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 524, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1308, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or …
Run Code Online (Sandbox Code Playgroud) 我cat | zgrep
在远程服务器上运行几个命令并单独收集它们的输出以进行进一步处理:
class MainProcessor(mp.Process):
def __init__(self, peaks_array):
super(MainProcessor, self).__init__()
self.peaks_array = peaks_array
def run(self):
for peak_arr in self.peaks_array:
peak_processor = PeakProcessor(peak_arr)
peak_processor.start()
class PeakProcessor(mp.Process):
def __init__(self, peak_arr):
super(PeakProcessor, self).__init__()
self.peak_arr = peak_arr
def run(self):
command = 'ssh remote_host cat files_to_process | zgrep --mmap "regex" '
log_lines = (subprocess.check_output(command, shell=True)).split('\n')
process_data(log_lines)
Run Code Online (Sandbox Code Playgroud)
但是,这会导致子进程('ssh ... cat ...')命令的顺序执行.第二个峰值等待第一个完成,依此类推.
如何修改此代码以便子进程调用并行运行,同时仍能够单独收集每个的输出?
是否可以使用相同的子进程命令按顺序执行任意数量的命令?
我需要每个命令在执行之前等待前一个命令完成,我需要它们全部在同一个会话/ shell中执行.我还需要它在Python 2.6,Python 3.5中工作.我还需要subprocess命令才能在Linux,Windows和macOS中工作(这就是为什么我echo
这里只使用命令作为示例).
请参阅下面的非工作代码:
import sys
import subprocess
cmds = ['echo start', 'echo mid', 'echo end']
p = subprocess.Popen(cmd=tuple([item for item in cmds]),
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
sys.stdout.flush()
print(">>> " + line.rstrip())
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,我应该采取哪种方法,以便在同一会话/ shell中以同步顺序执行我的命令?
我需要在命令提示符下运行一系列命令,并且我想自动执行此过程。我可以使用 Python 代码在命令提示符中运行命令:
import os
os.system("start /B start cmd.exe @cmd /k {command}")
Run Code Online (Sandbox Code Playgroud)
或者
import os
import subprocess
p = subprocess.Popen(["start", "cmd", "/k", "command"], shell = True)
Run Code Online (Sandbox Code Playgroud)
但是,执行命令后,我无法将另一个命令写入同一命令提示符。有没有办法做到这一点?
线程 Calling an external command in Python类似,但我不认为它解释了如何在完成执行之前的命令提示符之后向同一命令提示符写入新命令
另外,据我了解,使用子进程运行多个 bash 命令解释了如何并行运行命令而不是一个接一个地运行命令。
我得到了这个清单
commands = ['cd var','cd www','cd html','sudo rm -r folder']
Run Code Online (Sandbox Code Playgroud)
我试图将其中的所有元素作为 bash 脚本一一执行,但没有成功。我这里需要一个for循环吗?
如何实现?谢谢大家!!!!