Python получить текущий путь Pty - PullRequest
0 голосов
/ 31 января 2019

Я использую pyxterm.js для создания приложения веб-терминала, и в настоящее время я сталкиваюсь с проблемой, как получить текущий путь (например, os.getcwd) для созданного pty fd.

Script:

app = Flask(__name__)
app.config["fd"] = None
app.config["child_pid"] = None
socketio = SocketIO(app)

def read_and_forward_pty_output():
    max_read_bytes = 1024 * 20
    while True:
        socketio.sleep(0.01)
        if app.config["fd"]:
            timeout_sec = 0
            (data_ready, _, _) = select.select([app.config["fd"]], [], [], timeout_sec)
            if data_ready:
                output = os.read(app.config["fd"], max_read_bytes).decode("utf8", "ignore")

@app.route("/")
def index():
    return render_template("index.html")


@socketio.on("pty-input", namespace="/pty")
def pty_input(data):
    if app.config["fd"]:
        os.write(app.config["fd"], data["input"].encode())

@socketio.on("connect", namespace="/pty")
def connect():
    (child_pid, fd) = pty.fork()
    if child_pid == 0:
        subprocess.run(app.config["cmd"])
    else:
        app.config["fd"] = fd
        app.config["child_pid"] = child_pid
        # ......
        socketio.start_background_task(target=read_and_forward_pty_output)
        print("task started")


def main():
    # ......
    socketio.run(app)


if __name__ == "__main__":
    main()

Команда отправляется со стороны сети, и, скажем, начальный путь /User/Example/App

, а затем последовательность ввода со стороны сети:

some other commands
cd ..
some other commands
cd ..
some other commands

И теперь текущий путь должен быть на /User, но как я могу получить этот путь, используя код?

Любой совет будет оценен, спасибо:)

...