ipython や ipython ノートブックで入力が必要なシェル コマンドを実行できますか?
そのようなコマンドを実行すると、プロンプトが表示されますが、キーボードからの入力を提供する明らかな方法はありません。
例としてはrsync
、リモート サーバーへのコマンドがあります (したがって、パスワードが必要です)。ここにはセキュリティ上の危険性があることに疑いの余地はありませんlocalhost
。
ipython や ipython ノートブックで入力が必要なシェル コマンドを実行できますか?
そのようなコマンドを実行すると、プロンプトが表示されますが、キーボードからの入力を提供する明らかな方法はありません。
例としてはrsync
、リモート サーバーへのコマンドがあります (したがって、パスワードが必要です)。ここにはセキュリティ上の危険性があることに疑いの余地はありませんlocalhost
。
もう少し詳細に、回答として再投稿します。
いいえ、解決するのが本当に難しい長年の問題です: github.com/ipython/ipython/issues/514
問題は、プロセスがいつ入力を待っているかをアーキテクチャが判断できないため、ユーザーに入力を求めるプロンプトが表示されないことです。
pexpect と raw_input を使用して、特定のプログラムでこれをシミュレートできる場合があります。つまり、プロンプトがどのように見えるかを言うと、出力でそれを見つけ、ユーザーに入力を求めてプロセスに送り返します。例: Python の場合:
import pexpect
p = pexpect.spawn('python')
while True:
try:
p.expect('\n>>> ')
print(p.before)
p.sendline(raw_input('>>> '))
except pexpect.EOF:
break
これについて簡単なテストを行いました - 動作しますが、かなりラフです。コンセプトは改善される可能性があります。
悲しいことに、いいえ。
これに関するドキュメントが見つからなかったので、ソース ダイビングを行いました。その変換を実際に実行する ipython コードはhttps://github.com/ipython/ipython/blob/master/IPython/core/inputtransformer.py#L208で、具体的には次のとおりです。
def _tr_system(line_info):
"Translate lines escaped with: !"
cmd = line_info.line.lstrip().lstrip(ESC_SHELL)
return '%sget_ipython().system(%r)' % (line_info.pre, cmd)
言い換えれば、これは、!
.
ipython はおそらくあなたが望むものではありません-スクリプトに含めるPythonの代替については、この回答を確認してください。
これを探していたところ、ちょっとした問題であることがわかったとき、私の小さな顔が落ちました。他の人に役立つ場合に備えて、ソリューションを投稿するだけだと思いました。
基本的に、私はノートブックを介してコマンドを送信する方法を探していましたsudo
。おそらくあまり賢明ではありませんが、私がやっていることのためにそれが必要でした. そして、パスワードのプロンプトを表示できませんでした。そのため、a を使用しx-terminal
てコマンドを端末に送信することにしました。フィードバックはありませんが、戻る途中で IO に接続していないことが原因である可能性があります。これが私がノートブックで使用したものです:
1で] !xterm -e sudo mount -o loop system.img /system/
私はLinuxを使用して!cmd
いますが、Windowsでもうまくいくと思います