Как исправить «Ошибка в строке 72: Ошибка: sh: img2pdf: команда не найдена» - PullRequest
0 голосов
/ 23 декабря 2018

Вот ошибка, которую я имею в Редакторе сценариев: Error on line 72: Error: sh: img2pdf: command not found

Я пишу сценарий JavaScript для автоматизации (JXA), чтобы автоматизировать коллекцию домашних заданий по математике в Интернете после того, как задаю этот вопрос ,Сценарий наконец закончен.

Однако одна из программ, которые мне нужно использовать через Shell, img2pdf на самом деле не работает с использованием doShellScript ().Это неожиданно, потому что в osascript он отлично работает.

//Clean sender
function cleanSender(sender) {
  var pos = sender.search("<");
  return sender.slice(0, pos - 1);
}
//Num to string, padding included
function numToString(num) {
  if(num < 10) {
    return '0' + num.toString();
  }
  else {
    return num.toString();
  }
}
//date to time stamp
function genTimeStamp(date) {
  if (!(date instanceof Date)) {
    console.log('Type Error!');
    return undefined;
  }
  var hours = numToString(date.getHours());
  var minutes = numToString(date.getMinutes());
  var seconds = numToString(date.getSeconds());
  var month = numToString(date.getMonth() + 1);
  var day = numToString(date.getDate());
  var year = numToString(date.getFullYear());
  var timeStamp = month+day+year+hours+minutes+seconds;
  return timeStamp;
}

function run() {
  var mail = Application('Mail');
  var finder = Application('Finder');
  var app = Application.currentApplication();
  var keyword = "Test";
  var topFolderPath = "/Users/CatLover/Documents/HWBox";
  var topFolder = finder.startupDisk.folders.byName("Users").folders.byName("CatLover").folders.byName("Documents").folders.byName("HWBox");
  mail.includeStandardAdditions = true;
  finder.includeStandardAdditions = true;
  app.includeStandardAdditions = true;
  var messages = mail.inbox.messages;
  var messagesLength = messages.length;
  for(let i = 0; i < messagesLength; i++) {
    let message = messages[i];
    if (message.subject().includes(keyword) && message.mailAttachments().length != 0) {
      var sender = cleanSender(message.sender());//Name only
      var timeStamp = genTimeStamp(message.dateSent());//Folder name
      var attachments = message.mailAttachments();
      var individualPath = topFolderPath + '/' + sender;
      if (!finder.exists(Path(individualPath))) {
      //No folder!
        finder.make({new: "folder", at: Path(topFolderPath), withProperties:{name: sender}});
      }
      var messagePath = individualPath + '/' + timeStamp;
      if (!finder.exists(Path(messagePath))) {
      //No folder!
        finder.make({new: "folder", at: Path(individualPath), withProperties:{name: timeStamp}});
        var command = "img2pdf ";
        var attachmentsLength = attachments.length;
        for(let j = 0; j < attachmentsLength; j++) {
          let attachment = attachments[j];
          var filename = attachment.name();
          var filePath = messagePath + '/' + filename;
          mail.save(attachment, {in: Path(filePath)});
          command = command + filePath + ' ';
        }
        if (attachmentsLength > 1) {
          //Pics
          var pdfName = sender + timeStamp;
          command = command + '-o ' + messagePath + '/' + pdfName;
          app.doShellScript(command);
        }
      }
      else {
        continue;//Non-spammers aren't going to send two emails at the same time down to the same second. No need to process an already processed email.
      }
    }
  }
}

Я ожидаю, что все электронные письма в моем почтовом ящике с темами, содержащими «Тест» и вложения, будут обрабатываться следующим образом:

  1. Необходимо извлечь имя отправителя и создать папку с таким именем в папке HWBox, если она не существует.

  2. Отметка времени электронного письма вФорма MMDDYYYYHHMMSS должна быть извлечена, и в папке, соответствующей имени отправителя, должна быть создана папка с таким именем.Если такая отметка времени уже существует, ее следует игнорировать.

  3. Все вложения в электронное письмо должны быть загружены и помещены в папку с именем, созданным отметкой времени на шаге 2.

  4. Если имеется более 1 вложения, я предполагаю, что все они являются изображениями.В этом случае программа img2pdf используется через Shell для обработки таких изображений и их преобразования в PDF.

В действительности, шаг 1-3 работает.Шаг 4, с другой стороны, не работает.

1 Ответ

0 голосов
/ 24 декабря 2018

ОК, я думаю, я понимаю, что сейчас не так.По сути, doShellScript() на самом деле не знает путь img2pdf.После использования полного пути эта ошибка исчезает.

...