sftp アプリを PyObjC で作るって話。
やってます、上手くいかないだけです。
とりあえず今やっていること。
sshpass/main.c at master ? bauruine/sshpass ? GitHub
sshpass のソースってたったコレだけなんだよね。
これなら Python3 の標準モジュールだけで模写できそうだと考えた。
UNIX の中身の勉強にもなるし一石二鳥。
/dev/ptmx って何だ?
Ubuntu Manpage: ptmx, pts – 擬似端末のマスタとスレーブ
たしかに sudo や ssh は stdin やパイプからの入力はできない。
/dev/ptmx を利用すればなんとかなるってことね。
#!/usr/bin/env python3
import os, signal, fcntl
# Ctrl+C
signal.signal(signal.SIGINT, signal.SIG_DFL)
# ptmx
masterpt = os.open('/dev/ptmx', os.O_RDWR)
# not macOS
#fcntl.fcntl(masterpt, fcntl.F_SETFL, os.O_NONBLOCK)
#name = os.ttyname(masterpt)
childpid = os.fork()
if childpid == 0:
os.setsid()
#os.execvp('ssh', ['ssh', 'sasakima-nao@mba2.local'])
os.execvp('python3', ['python3'])
# Error
print(f'{__file__}: Failed to run command')
#slavept = os.open(name, os.O_RDWR|os.O_NOCTTY)
os.close(masterpt)
#os.close(slavept)
print(f'{__file__}: EOL')
とりあえず fork して execvp することはできた。
呼び出し側のプロセスを終了して子プロセスに置き換える。
ほぼ os モジュールだけでなんとかなるのようで。
起動すると EOL が表示され Python3 インタプリタが始まる。
Ctrl+D すると bash はもう破棄されているので gnome-terminal が終了する。
macOS では「プロセスが完了しました」と出る。
で、ssh のほうの現状。
こんなになってしまう。
sshpass.c をトレースしているつもりだけどまだ何か間違っているっぽい。
上手くいったらまた今度。
