Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个方法(python)中找不到命令,但在另一个方法(shell脚本)中找不到命令_Python_Ssh_Paramiko_Netezza - Fatal编程技术网

在一个方法(python)中找不到命令,但在另一个方法(shell脚本)中找不到命令

在一个方法(python)中找不到命令,但在另一个方法(shell脚本)中找不到命令,python,ssh,paramiko,netezza,Python,Ssh,Paramiko,Netezza,我被送进了另一台机器。在这台机器中,我有一个名为get\u count.sh #!/bin/sh nzsql -u user -pw password -host hostname -port 1234 -db database -c "query" 当我加入时运行此脚本,它将按预期工作/get\u count.sh #!/bin/sh nzsql -u user -pw password -host hostname -port 1234 -db database -c "query"

我被送进了另一台机器。在这台机器中,我有一个名为
get\u count.sh

#!/bin/sh

nzsql -u user -pw password -host hostname -port 1234 -db database -c "query"
当我加入时运行此脚本,它将按预期工作
/get\u count.sh

#!/bin/sh

nzsql -u user -pw password -host hostname -port 1234 -db database -c "query"
我正在使用python模块
paramiko
。这允许我在机器中使用ssh,并使用python将命令传递给ssh会话

我得到了输出:

/get\u count.sh:未找到第3行:nzsql:命令

我连接到同一个ssh会话,但我不确定为什么会发生这种情况。从本质上讲,这两个过程做的是同一件事,但我不确定为什么做同样的事情是以一种方式工作,而不是以另一种方式工作

我尝试将脚本的内容更改为简单的内容,因为我认为这可能是由于
paramiko
。因此,我将我的
nzsql
查询替换为
echo 123
功能正常

我的
.bashrc

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
我的
.bash\u配置文件

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
我通过paramiko做了一个
echo$PATH
,得到:

 /usr/local/java/current/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
通过登录终端:

/usr/local/java/current/bin:/usr/lib/oracle/11.2/client64/bin:/app/netezza/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/bli1/bin

这里,我假设您正在调用paramiko方法
exec_command()
来运行您的命令

exec_command()
与在交互式会话中运行相同的命令不同

相反,当您运行
client.exec\u命令('./get\u count.sh')
时,您得到的行为相当于
ssh您的主机“/get\u count.sh”
。它只运行一个非交互式shell,并且不运行交互式登录shell(由
ssh yourhost
调用)调用的脚本


首选:在Shell中模拟Paramiko的
exec_命令
行为 您在这里的最佳选择是首先从命令行复制;在那里制定一个解决方案;然后将修复程序移植到代码中

# do this to reproduce behavior from the command line:
ssh yourhost ./get_count.sh
…然后,执行手动点文件包含。下面是一个大致的例子,它可能是这样的:

ssh yourhost '. .profile; . .bashrc; ./get_count.sh'
在SSH命令行上传递了与shell命令相关的内容后,可以将其传递给
exec\u command()
paramiko方法


回退:从Paramiko获取交互式会话行为
或者,如果希望paramiko的行为与交互式会话相同,请使用
invoke_shell()
paramiko方法。注意,您必须以这种方式做大量额外的工作——模拟击键以执行远程命令,监视输出以确定该命令是否已退出,以及自己确定退出状态。出于这个原因,我不推荐它。

我在这里假设您正在调用paramiko方法
exec_command()
来运行您的命令

exec_command()
与在交互式会话中运行相同的命令不同

相反,当您运行
client.exec\u命令('./get\u count.sh')
时,您得到的行为相当于
ssh您的主机“/get\u count.sh”
。它只运行一个非交互式shell,并且不运行交互式登录shell(由
ssh yourhost
调用)调用的脚本


首选:在Shell中模拟Paramiko的
exec_命令
行为 您在这里的最佳选择是首先从命令行复制;在那里制定一个解决方案;然后将修复程序移植到代码中

# do this to reproduce behavior from the command line:
ssh yourhost ./get_count.sh
…然后,执行手动点文件包含。下面是一个大致的例子,它可能是这样的:

ssh yourhost '. .profile; . .bashrc; ./get_count.sh'
在SSH命令行上传递了与shell命令相关的内容后,可以将其传递给
exec\u command()
paramiko方法


回退:从Paramiko获取交互式会话行为
或者,如果希望paramiko的行为与交互式会话相同,请使用
invoke_shell()
paramiko方法。注意,您必须以这种方式做大量额外的工作——模拟击键以执行远程命令,监视输出以确定该命令是否已退出,以及自己确定退出状态。出于这个原因,我不推荐它。

我在这里假设您正在调用paramiko方法
exec_command()
来运行您的命令

exec_command()
与在交互式会话中运行相同的命令不同

相反,当您运行
client.exec\u命令('./get\u count.sh')
时,您得到的行为相当于
ssh您的主机“/get\u count.sh”
。它只运行一个非交互式shell,并且不运行交互式登录shell(由
ssh yourhost
调用)调用的脚本


首选:在Shell中模拟Paramiko的
exec_命令
行为 您在这里的最佳选择是首先从命令行复制;在那里制定一个解决方案;然后将修复程序移植到代码中

# do this to reproduce behavior from the command line:
ssh yourhost ./get_count.sh
…然后,执行手动点文件包含。下面是一个大致的例子,它可能是这样的:

ssh yourhost '. .profile; . .bashrc; ./get_count.sh'
在SSH命令行上传递了与shell命令相关的内容后,可以将其传递给
exec\u command()
paramiko方法


回退:从Paramiko获取交互式会话行为
或者,如果希望paramiko的行为与交互式会话相同,请使用
invoke_shell()
paramiko方法。注意,您必须以这种方式做大量额外的工作——模拟击键以执行远程命令,监视输出以确定该命令是否已退出,以及自己确定退出状态。出于这个原因,我不推荐它。

我在这里假设您正在调用paramiko方法
exec_command()
来运行您的命令

exec_command()
不同于从in中运行相同的命令