Using subprocess with fab in python
我不熟悉python,尝试使用子流程在另一个脚本中运行脚本。我在网上找到了一些非常接近的资源,但不幸的是,还不能帮助我正确地运行代码。
我想做的是:在我的脚本1(主脚本)中,我正在创建fabfile.py(脚本2)。此script2或fabfile.py需要从script1执行。经过一些研究,我发现execfile和os.systems不是很好的选择,因此我决定使用子流程。(参考:如何使一个python文件运行另一个文件?)
以下是我正在做但不工作的事情:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from os.path import expanduser home = expanduser("~") import os os.getcwd() desk ="/Desktop" path = str(home)+str(desk) f = open("fabfile.py","w") # Creating a fabfile.py f.write("from fabric.api import run def task1(): run('ls')") import subprocess host = raw_input("Enter the host IP with username e.g. [email protected]:") p1 = subprocess.Popen(['fab', '-f path/fabfile.py', '-H host'],stdout=subprocess.PIPE) output = p1.communicate() print output |
注:在线
1 | p1 = subprocess.Popen(['fab', '-f path/fabfile.py', '-H host'],stdout=subprocess.PIPE) |
号
我尝试过很多不同的格式——引号和双引号放置,
分开的标志
1 | p1 = subprocess.Popen(['fab', '-f', path+'/fabfile.py', '-H', host],stdout=subprocess.PIPE) |
当连接路径时,最好使用os.path.join()。
1 | fab_file = os.path.join(os.path.expanduser("~"),"Desktop", 'fabfile.py') |
。
代码可能不是100%正确的,但这样的代码应该可以工作。
1 2 3 4 5 6 7 8 | import fabric.api as api from path.my-other-fabfile import my_ssh_connection_blah api.ls() host = raw_input("Enter the host IP with username e.g. [email protected]:") env['host']=host my_ssh_connection_blah() |
。
我发现还有一个问题,即输入密码。因为即使纠正了变量问题,我也会得到错误(另一个错误)。我想我可以不使用晶圆厂,而直接使用晶圆厂,
1 2 3 4 | from subprocess import Popen, PIPE host = raw_input("Enter the host IP with user e.g. [email protected]:") conn1 = Popen(['ssh',host,'ls'], stdin=PIPE) conn1.communicate('password') |
参考:使用子进程发送密码
python不会为您插入变量
更改:
1 | p1 = subprocess.Popen(['fab', '-f path/fabfile.py', '-H host'],stdout=subprocess.PIPE) |
到:
1 | p1 = subprocess.Popen(['fab', '-f ' + path + '/fabfile.py', '-H ' + host],stdout=subprocess.PIPE) |
号