我已经创建了一个RSA公钥,我想将其添加到authorized_keys文件中,但是我的Ubuntu 11.10机器中没有这样的文件.
如何将密钥添加到authorized_keys?
我尝试完成的任务是流式传输ruby文件并打印出输出.(注意:我不想一次打印出所有内容)
main.py
from subprocess import Popen, PIPE, STDOUT
import pty
import os
file_path = '/Users/luciano/Desktop/ruby_sleep.rb'
command = ' '.join(["ruby", file_path])
master, slave = pty.openpty()
proc = Popen(command, bufsize=0, shell=True, stdout=slave, stderr=slave, close_fds=True)
stdout = os.fdopen(master, 'r', 0)
while proc.poll() is None:
data = stdout.readline()
if data != "":
print(data)
else:
break
print("This is never reached!")
Run Code Online (Sandbox Code Playgroud)
ruby_sleep.rb
puts "hello"
sleep 2
puts "goodbye!"
Run Code Online (Sandbox Code Playgroud)
问题
流文件工作正常.hello/goodbye输出以2秒延迟打印.正如脚本应该工作.问题是readline()最后会挂起而永不退出.我从未到过最后一个印刷品.
我知道有很多这样的问题,这里有一个stackoverflow但是没有它们让我解决问题.我不是那个整个子流程的东西,所以请给我一个更实际/具体的答案.
问候
编辑
修复意外的代码.(与实际错误无关)
我想从我的python脚本启动一个进程main.py,特别是我想运行下面的命令
`nohup python ./myfile.py &`
Run Code Online (Sandbox Code Playgroud)
这个文件myfile.py应该在我的主要python脚本退出之后.
另外,我希望得到main.py新流程.
我试过pid,os.spawnl*&os.exec*方法,subprocess.Popen如果我的main.py脚本退出,都会终止我的.
我可能会遗漏一些东西.
更新:我可以使用myfile.py同main.py?这是一种正确的方法吗?
例
a = subprocess.Popen([sys.executable, "nohup /usr/bin/python25 /long_process.py &"],\
stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print a.pid
Run Code Online (Sandbox Code Playgroud)
如果我检查os.startfile,我看不到任何进程正在运行.
long_process.py继续打印一些文本:没有退出.
我在这里做错了吗?
我想在子进程上使用超时
from subprocess32 import check_output
output = check_output("sleep 30", shell=True, timeout=1)
Run Code Online (Sandbox Code Playgroud)
不幸的是,虽然这会引发超时错误,但它会在30秒后发生.似乎check_output不能中断shell命令.
我可以在Python端做些什么来阻止它?我怀疑subprocess32无法终止超时进程.
我的目标很简单:启动rsync并且不要等待.
Debian上的Python 2.7.9
示例代码:
rsync_cmd = "/usr/bin/rsync -a -e 'ssh -i /home/myuser/.ssh/id_rsa' {0}@{1}:'{2}' {3}".format(remote_user, remote_server, file1, file1)
rsync_cmd2 = "/usr/bin/rsync -a -e 'ssh -i /home/myuser/.ssh/id_rsa' {0}@{1}:'{2}' {3} &".format(remote_user, remote_server, file1, file1)
rsync_path = "/usr/bin/rsync"
rsync_args = shlex.split("-a -e 'ssh -i /home/mysuser/.ssh/id_rsa' {0}@{1}:'{2}' {3}".format(remote_user, remote_server, file1, file1))
#subprocess.call(rsync_cmd, shell=True) # This isn't supposed to work but I tried it
#subprocess.Popen(rsync_cmd, shell=True) # This is supposed to be the solution but not for me
#subprocess.Popen(rsync_cmd2, shell=True) # Adding my own shell "&" …Run Code Online (Sandbox Code Playgroud) 这个问题可能听起来很奇怪,但我如何让工作失败?
我有一个python脚本,使用scons编译少量文件,并作为jenkins工作运行.该脚本测试编译器是否可以构建x64或x86二进制文件,如果它无法执行其中一个操作,我希望该作业失败.
例如:如果我在64位系统上运行我的脚本并且无法编译64位.我可以在脚本中做些什么可能导致失败吗?