python-3.x - os.startfile 奇怪的行为
问题描述
我从一个网络扩展接收一个字符串。该字符串是本地文件路径,我正在尝试使用默认操作系统设置打开文件路径,无论它可能是什么。
编辑:对不起!问题是:如何使用操作系统默认应用程序成功打开给定路径?
文件路径最初是一个字符串,格式如下:
'file:///C:/Test/File/Path.docx'
奇怪的事情!
如果 Word 已经打开,它可以正常工作。
如果 Word 尚未打开,则蓝色 Word“正在启动”屏幕显示片刻然后消失(崩溃,因为随后的尝试显示“在安全模式下启动 word?”对话框代替片刻)。
除非我专门使用两次“os.startfile”,否则它根本不起作用。一个在 try 语句之外,一个在内部。任何其他组合都不起作用。
在 IDLE 中,它只需一个“os.startfile”调用就可以 100% 地工作。
我也尝试过使用 subprocess.check_call,但这根本无法启动任何东西。
这是脚本:
#!/usr/bin/env python
import sys
import json
import struct
import re, subprocess, os
def read_thread_func(queue):
while 1:
text_length_bytes = sys.stdin.buffer.read(4)
if len(text_length_bytes) == 0:
sys.exit(0)
text_length = struct.unpack("i", text_length_bytes)[0]
text = sys.stdin.read(text_length)
data = json.loads(text)
fileStr = data['url']
filePath = re.sub('file:\/{1,3}','',fileStr)
filePath = filePath.replace("/","\\")
filePath = os.path.normpath(filePath)
os.startfile(filePath)
try:
os.startfile(filePath)
except AttributeError:
"nothing to see here"
sys.exit(0)
def Main():
read_thread_func(None)
sys.exit(0)
if __name__ == '__main__':
Main()
解决方案
推荐阅读
- java - 如何在适配器内的视图中膨胀图像
- javascript - 有没有办法将静态和动态路由设置到同一个地方?
- r - summaryBy 和很多变量
- javascript - 聚合物构建单一元素“点燃元素”
- pyspark - 将 Python 脚本提交到 Databricks JOB
- c# - 如何将带有数据的 string[][] 转换为 IDataView-Object?(ML.NET)
- html - 角度材料表:取消绑定复选框单击行
- javascript - 如何将数组值插入对象?
- flutter - Flutter - 如果可能,我如何剪辑固定大小的渐变并为其设置动画?
- sql - 以十进制返回日期差异