我正在尝试打开带有子流程模块的记事本,但发生错误。
function unzipper(buffer) {
return new Promise((resolve, reject) => {
unzippedContents = {};
yauzl.fromBuffer(buffer, {lazyEntries: true}, (err, zip) => { // yauzl = require('yauzl')
if (err) return reject(err);
zip.on('entry', (entry) => {
if (/\/$/.test(entry.fileName)) return zip.readEntry(); // no directories
zip.openReadStream(entry, async (err, rs) => {
try {
if (err) throw err;
unzippedContents[entry.fileName] = await stream2buffer(rs);
} catch (err) {
zip.close();
return reject(err);
}
zip.readEntry();
});
}).on('end', () => {
zip.close();
resolve(unzippedContents);
});
zip.readEntry(); // start the process
});
});
}
错误:
import subprocess
subprocess.Popen(r'C:\Users\user\Desktop\notepad.lnk')
答案 0 :(得分:1)
从错误中很明显,子进程不将快捷方式视为应用程序。以下代码可用于启动快捷方式-
BACKGROUND_TASK_RUN_ASYNC = True
BACKGROUND_TASK_ASYNC_THREADS = 4
答案 1 :(得分:0)
我相信您的问题是Popen本身不遵循Windows符号链接。您必须在执行过程中包含一个shell:
subprocess.Popen(r'C:\Users\user\Desktop\notepad.lnk', shell=True)
因为外壳程序会在调用Popen本身之前先解析链接。