我目前正在从事一个项目,该项目涉及运行ubilinux的Up-board,该ubilinux连接到三个USB设备。我们目睹了主板发现USB设备断开连接的问题。当USB设备重新连接时,它将加载USBSerial和FTDI_sio模块,这是一个问题。在程序可以检查是否存在连接的设备之前,我需要运行
sudo /sbin/rmmod usbserial
sudo /sbin/rmmod ftdi_sio
我不希望程序不断执行这些操作,所以我要做的是创建一个线程,寻找要插入的USB设备。我正在使用pyudev来完成此操作。
我的问题是,我不必总是为usbserial和ftdi_sio执行rmmod,因为在连接USB设备时它们并不总是加载。有什么方法可以运行用python编写的检查,以确定是否已加载ftdi_sio和usbserial?
我已经进行了许多搜索,并且找到了许多链接,这些链接显示了如何将其作为bash脚本进行操作,但是我试图找出是否可以在python中进行操作。对于加载python模块,我似乎也获得了大量搜索结果,但这并不是很有帮助。
答案 0 :(得分:1)
下面是一些 builder.setNegativeButton("CONFIRM", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
try {
mService = Common.getAPI();
Cart cartItem = new Cart();
cartItem.name = txt_product_dialog.getText().toString();
cartItem.amount = Integer.parseInt(number);
cartItem.price = finalPrice;
cartItem.link = foodList.get(position).Link;
Common.cartRepository.insertToCart(cartItem);
Log.d("KANZEN_DEBUG", new Gson().toJson(cartItem));
`Toast.makeText(context, "Successfully Added To Your Order!",` `Toast.LENGTH_SHORT).show();`
} catch (Exception ex) {
`Toast.makeText(context, ex.getMessage(),` `Toast.LENGTH_SHORT).show();`
}
}
});
builder.setView(itemView);
builder.show();
Heres my API
@FormUrlEncoded
@POST("sendorder.php")
Call<User> sendOrder(@Field("name") String name,
@Field("link") String birthdate,
@Field("amount") String amount,
@Field("price") String price);
代码,用于检查是否使用Popen
加载了该代码:
lsmod
那里的印刷品只是为了证明它有效;您可以将其替换为import subprocess
def module_loaded(module_name):
"""Checks if module is loaded"""
lsmod_proc = subprocess.Popen(['lsmod'], stdout=subprocess.PIPE)
grep_proc = subprocess.Popen(['grep', module_name], stdin=lsmod_proc.stdout)
grep_proc.communicate() # Block until finished
return grep_proc.returncode == 0
for module_name in ['usbserial', 'ftdi_sio']:
loaded = module_loaded(module_name)
print('Module {} {} loaded'.format(module_name, "is" if loaded else "isn't"))
代码。输出:
rmmod
我从Module usbserial isn't loaded
ftdi_sio 52791 0
Module ftdi_sio is loaded
开始以btw开头,但这并没有按预期进行。 modinfo
会显示模块信息,无论是否已加载。 modinfo
方法似乎效果很好。