実行するリモートホストからシェルスクリプトを呼び出すPythonスクリプトがあります。このスクリプトはファイルを読み取り、見つかったテキストパターンに基づいていくつかの操作を実行します。 whileループを介してファイルを読み取ろうとすると、最後の行を読んだ後もループが停止することを確認しました。 Ctrl + Cを使用してPythonプログラムを停止すると、次のスタックトレースが表示されます。
address.py
ssh_command = [
'ssh',
'{}@{}'.format('user', i),
'bash', '/tmp/checks.sh'
]
ssh_command.append(i)
# Execute the SSH command
try:
subprocess.run(ssh_command, check=True)
except subprocess.CalledProcessError as e:
print('ERROR: Script execution failed with error code:', e.returncode)
check.sh
while read line; do
if [[ $line =~ $pattern1 ]]; then
echo -e "${line}\n${append_text}" | sudo tee -a "$file_path_tmp_new"
elif [[ $line =~ $pattern2 ]]; then
echo -e "${line}\n${append_text}" | sudo tee -a "$file_path_tmp_new"
elif [[ $line =~ $pattern0 ]]; then
echo -e "${line}\n${append_text}" | sudo tee -a "$file_path_tmp_new"
else
echo "$line" | sudo tee -a "$file_path_tmp_new"
fi
done < "$file_path_tmp"
出力:
^CTraceback (most recent call last):
File "adr.py", line 58, in <module>
subprocess.run(ssh_command, check=True)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/subprocess.py", line 495, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/subprocess.py", line 1020, in communicate
self.wait()
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/subprocess.py", line 1083, in wait
return self._wait(timeout=timeout)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/subprocess.py", line 1806, in _wait
(pid, sts) = self._try_wait(0)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/subprocess.py", line 1764, in _try_wait
(pid, sts) = os.waitpid(self.pid, wait_flags)
KeyboardInterrupt
ここで何が間違っているのかについての助けが必要ですか?ティア