バックグラウンドでPythonスクリプトを実行した後、インタラクティブなPythonシェルを開く

匿名

python3 -i test.pytest.pyを実行した後、インタラクティブなPythonシェルを開きます。私はバックグラウンドでそれを実行しようとする場合は、python3 -i test.py &ジョブに自動的に停止^Cし、ショー

[4]+  Stopped                 python3 -i test.py

、その後、Pythonのインタラクティブシェルにアクセスできません(test.pyの変数はまだ環境内にあります)。fgプロセスを実行すると(つまりfg %4)、入力が表示されないが、を押し<Enter>後も実行されるインタラクティブシェルが表示されます。test.pyをバックグラウンドで実行した後、インタラクティブシェルを「通常どおり」実行するにはどうすればよいですか?

(参考までに、test.pyには次のものが含まれています

from time import sleep
a = 'hello world'
for i in range(10):
    sleep(1)
    print(a)

そして私のシェルは次のようになります:

$ python3 -i test.py &
[4] 6708
$ hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
fg %4
python3 -i test.py
>>> 'hello world'
>>>

a最初のプロンプトが表示されてから入力しましたが、表示され>>>ません。)。

-@ muruを編集します-

fgで通常実行した後、bgに送信すると、次のようになります。

$
$
$ python3 -i test.py
hello world
hello world
hello world
hello world
^Z
[4]+  Stopped                 python3 -i test.py
$ bg %4
[4]+ python3 -i test.py &
$ hello world
hello world
hello world
hello world
hello world
hello world
echo 'hello world'
hello world

[4]+  Stopped                 python3 -i test.py
$
$

ここで、シェルは入力を期待していてecho 'hello world'、10個の「HelloWorld」の後に入力しました。

LL3

これは、バックグラウンドのPythonインタープリターが、test.pyプログラムの実行を終了するとすぐに、プロンプトをコマンドラインシェルと「競合」させるために発生します

当然のことながら、Pythonはその「戦い」を失います。なぜなら、Pythonはその時点でインタラクティブになることを許可されていないからです。ただし、停止が少し遅すぎて、fgコマンドで正常に再開されない状態で独自のプロンプトを残すのに十分です。

これを解決する1つの方法は、Pythonプログラムの最後に次の行を追加することです。

import os, signal  # access os-level functions and UNIX-signals
os.kill(os.getpid(), signal.SIGSTOP)  # send myself the UNIX SIGSTOP signal

(もちろん、import通常の方法でプログラムの上に配置することもできます。)

そのos.kill()行は、Pythonインタープリターを停止状態にします。これは、間違ったタイミングでインタラクティブにしようとしたときと同じです。ただ、今回はプロンプトを出す前にそれ自体を実行するので、一貫性のない状態のままになることはありません。

os.kill()コマンドラインシェルがPythonが停止したことを通知するので、いつ到達するかがわかります。そのfg 時点でPythonが再開され、Pythonがos.kill()回線から続行されるため、独自のインタラクティブセッションが開始されます。

bgそれによって停止された後、それを再開するために使用しないでください。os.kill()そうすると、バックグラウンドでインタラクティブになろうとしたためにカーネルがPythonを再び停止するだけです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

マウスパッド GUI ウィンドウを開くシェル スクリプトでの同時ステップ実行を停止できない

分類Dev

バックグラウンドで実行されるインタラクティブスクリプトに引数を渡す

分類Dev

バックグラウンドで実行されるインタラクティブスクリプトに引数を渡す

分類Dev

コルドバ、システムブラウザでリンクを開くためにInAppBrowserプラグインが必要なのはなぜですか

分類Dev

RAMにはアクティブなものだけを保持しながら、バックグラウンドで実行されているアイドル状態のソフトウェアのメモリ データをスワップするために転送しますか?

分類Dev

別のシェルスクリプト内のバックグラウンドでのインタラクティブシェル

分類Dev

非インタラクティブシェルでスクリプトを実行しますか?

分類Dev

RaspberryPiのバックグラウンドで実行されるPythonスクリプトを使用してテキストファイルを作成する

分類Dev

Pythonスクリプトをバックグラウンドで実行する

分類Dev

tkinterをアクティブにしながらバックグラウンドでタスクを実行しているPython

分類Dev

bash スクリプトからインタラクティブな gnuplot ウィンドウを開く方法

分類Dev

Pythonインタラクティブセッションでhelp()を実行した後、続行します

分類Dev

dockerはコンテナーを終了せずにバックグラウンドでシェルスクリプトを実行します

分類Dev

pytoexeconverterでPythonスクリプトをexeに変換した後も、プロセスはバックグラウンドで実行されています

分類Dev

jEdit GUI ウィンドウを開くシェル スクリプトでの同時ステップ実行を停止できない

分類Dev

バックグラウンドでシェルスクリプトを実行する

分類Dev

バックグラウンドでシェルスクリプトを実行する方法は?

分類Dev

デスクトップPCでネイティブメッセージングを使用したMSEdge拡張機能-バックグラウンドでUWPアプリを実行/ UIなし

分類Dev

バックグラウンドでシェルスクリプトを実行して出力を取得しない方法

分類Dev

バックグラウンドでシェルコマンドを実行し、Pythonを使用してstdoutをログファイルにパイプします

分類Dev

バックグラウンドスクリプトで、新しく開いたタブをリッスンします

分類Dev

インタラクティブなPythonスクリプトをブラウザで実行するように変換します

分類Dev

スクリプトが終了した後、バックグラウンドプロセスを実行します

分類Dev

シェルスクリプトの実行:インタラクティブに入力したかのようにコマンドを出力に含める方法

分類Dev

PHPshell_execを使用してバックグラウンドでPythonスクリプトを実行する

分類Dev

閉じた状態でアプリケーションを実行した後でも、iPhoneのバックグラウンドタスク

分類Dev

Golangでサーバーをリッスンしながらバックグラウンドタスクを実行するためのベストプラクティスは何ですか?

分類Dev

バックグラウンドでsshセッションを介してサーバー上でPythonスクリプトを永続的に実行します

分類Dev

バックグラウンドでコマンドを実行すると、シェルスクリプトでファイルに書き込めません

Related 関連記事

  1. 1

    マウスパッド GUI ウィンドウを開くシェル スクリプトでの同時ステップ実行を停止できない

  2. 2

    バックグラウンドで実行されるインタラクティブスクリプトに引数を渡す

  3. 3

    バックグラウンドで実行されるインタラクティブスクリプトに引数を渡す

  4. 4

    コルドバ、システムブラウザでリンクを開くためにInAppBrowserプラグインが必要なのはなぜですか

  5. 5

    RAMにはアクティブなものだけを保持しながら、バックグラウンドで実行されているアイドル状態のソフトウェアのメモリ データをスワップするために転送しますか?

  6. 6

    別のシェルスクリプト内のバックグラウンドでのインタラクティブシェル

  7. 7

    非インタラクティブシェルでスクリプトを実行しますか?

  8. 8

    RaspberryPiのバックグラウンドで実行されるPythonスクリプトを使用してテキストファイルを作成する

  9. 9

    Pythonスクリプトをバックグラウンドで実行する

  10. 10

    tkinterをアクティブにしながらバックグラウンドでタスクを実行しているPython

  11. 11

    bash スクリプトからインタラクティブな gnuplot ウィンドウを開く方法

  12. 12

    Pythonインタラクティブセッションでhelp()を実行した後、続行します

  13. 13

    dockerはコンテナーを終了せずにバックグラウンドでシェルスクリプトを実行します

  14. 14

    pytoexeconverterでPythonスクリプトをexeに変換した後も、プロセスはバックグラウンドで実行されています

  15. 15

    jEdit GUI ウィンドウを開くシェル スクリプトでの同時ステップ実行を停止できない

  16. 16

    バックグラウンドでシェルスクリプトを実行する

  17. 17

    バックグラウンドでシェルスクリプトを実行する方法は?

  18. 18

    デスクトップPCでネイティブメッセージングを使用したMSEdge拡張機能-バックグラウンドでUWPアプリを実行/ UIなし

  19. 19

    バックグラウンドでシェルスクリプトを実行して出力を取得しない方法

  20. 20

    バックグラウンドでシェルコマンドを実行し、Pythonを使用してstdoutをログファイルにパイプします

  21. 21

    バックグラウンドスクリプトで、新しく開いたタブをリッスンします

  22. 22

    インタラクティブなPythonスクリプトをブラウザで実行するように変換します

  23. 23

    スクリプトが終了した後、バックグラウンドプロセスを実行します

  24. 24

    シェルスクリプトの実行:インタラクティブに入力したかのようにコマンドを出力に含める方法

  25. 25

    PHPshell_execを使用してバックグラウンドでPythonスクリプトを実行する

  26. 26

    閉じた状態でアプリケーションを実行した後でも、iPhoneのバックグラウンドタスク

  27. 27

    Golangでサーバーをリッスンしながらバックグラウンドタスクを実行するためのベストプラクティスは何ですか?

  28. 28

    バックグラウンドでsshセッションを介してサーバー上でPythonスクリプトを永続的に実行します

  29. 29

    バックグラウンドでコマンドを実行すると、シェルスクリプトでファイルに書き込めません

ホットタグ

アーカイブ