我正在尝试使用FUSE和python(特别是fusepy)实现与dropbox类似的功能。我想到了两种不同的方法。如果可以的话,我更喜欢方法1。
我想拥有一个客户端/服务器模型,客户端通过HTTP向服务器发送命令行请求(例如客户端发送字符串'ls'或'cd',...等)。实现FUSE的服务器应该在收到命令行请求时处理命令行请求,并将结果发送回客户端。 为了实现这一点,我需要能够以编程方式向服务器上的FUSE实现发出诸如“ls”之类的命令。 有没有办法做到这一点?我可以绑定服务器的FUSE实现来将某些文件/流/输入视为终端/命令行吗?
我在考虑在客户端上实现FUSE,并且只通过HTTP发送系统调用请求(例如,客户端通过HTTP发送字符串'chmod'或'read',并在请求)。这种方法似乎效率较低,因为每次系统调用都会发出一个请求,而不是在第一种方法中对命令行请求中的系统调用进行批处理。但是,从我所看到的情况来看,在服务器上的FUSE实现中以编程方式调用系统调用似乎并不困难。 如果第一种方法无法完成,我在FUSE实现中如何以编程方式调用系统调用?
最后,这是完全不同的方式吗?这些只是我解决问题的两个想法,但也许存在可以更好地实现客户端/服务器FS的其他东西。 (dropbox如何做到这一点?)
答案 0 :(得分:1)
事实证明,我真正应该做的是调用subprocess.check_output(...)
。保险丝处理系统调用,而不是终端命令。从命令行转换到系统调用应该通过OS的内核完成。在这种情况下,我向操作系统询问输出,并将该字符串返回给客户端。