我有以下内容:
import psycopg2
import gzip
conn_string="dbname='<>' port='5439' user='<>' password='<>' host='<>'";
print "Connecting to database\n ->%s"%(conn_string)
conn=psycopg2.connect(conn_string);
cursor=conn.cursor();
with gzip.open('<gzip filelocation>','r') as l:
for line in l:
cursor.execute('copy <table_name from %s with delimiter '\t'", (line,))
这会输出以下错误:
开放终端失败:不是终端
是否可以通过这种方式创建tmux会话?
答案 0 :(得分:0)
使用Laravel SSH无法做到这一点。但是,Laravel的SSH组件在内部使用phpseclib SSH,直接使用时更灵活。
现在我假设您正在尝试创建tmux
会话以启动某些进程,您希望在SSH连接结束后继续在后台运行该进程。好的部分是因为phpseclib是Laravel SSH的依赖,它已经存在,所以没有必要安装它。我对tmux
及其选项不太熟悉,但我可以提供使用screen
的解决方案:
use \phpseclib\Net\SSH2;
use \phpseclib\File\ANSI;
$ssh = new SSH2('host');
$ansi = new ANSI();
if ($ssh->login('username', 'password')) {
// The command below will start a screen
// session and automatically detach it
$ssh->write("screen -m -d -S processes top\n");
// You can include the lines below to see the
// output of the write command converted to HTML
$ansi->appendString($ssh->read());
echo $ansi->getScreen();
}
这将创建一个名为screen
的新自动分离processes
会话,并在其中运行top
命令。要连接到会话,您只需在控制台中运行它:
ssh username@host -t "screen -r processes"
这将重新连接processes
会话,以便您了解正在进行的操作。当然,如果您有偏好,可以根据tmux
进行调整。