Tablica argumentów w execFile

0

Cześć,
Próbuję przekazać do konsoli zadanie z wcześniej przygotowaną tablicę z argumentami która wygląda np. tak:

params = [
    '--setvariable=nazwa_produktu:Etykiety_samoprzylepne',
    '--setvariable=id:30013-1',
    '--setvariable=Ksztalt:kwadrat_-_prostokat',
    '--setvariable=Szerokosc_cm:4.5',
    '--setvariable=Wysokosc_cm:4.5',
    '--setvariable=Podloze:Papier_Samoprzylepny_Polblysk_(PP)',
    '--setvariable=Zadruk:Druk_cyfrowy_Kolor',
    '--setvariable=Klej:Trwaly_(T)',
    '--setvariable=Uszlachetnienie:Nie',
    '--setvariable=Wykonczenie:Ciecie_na_sztuki',
    '--setvariable=Ilosc_wzorow:4',
    '--setvariable=Termin_Realizacji:Standard',
    '--setvariable=Naklad:15'
]

Tablica przy każdej sesji ma różną długość.

Niestety przy próbie przekazania jej jako argumenty do execFile :

const jobForCallas = execFile (
  'C:/Program Files/callas pdfToolbox Server 13/cli/pdftoolbox', 
  [params], 
  (error, stdout, stderr) => {
      if (error) {
          throw error;
      }
      console.log(stdout);
     }
)

lub przy próbie zmiany tablicy na stringa

let paramsForServer = `'${params.toString().replace(/,/g, "', '").replace(/'"/g, "'").replace(/"'/g, "'")}'`
const jobForCallas = execFile (
  'C:/Program Files/callas pdfToolbox Server 13/cli/pdftoolbox', 
  [paramsForServer], 
  (error, stdout, stderr) => {
      if (error) {
          throw error;
      }
      console.log(stdout);

mam błędy ChildProcess tego typu:

  • dla tablicy
Error: Command failed: C:/Program Files/callas pdfToolbox Server 13/cli/pdftoolbox --setvariable=nazwa_produktu:Etykiety_samoprzylepne,--setvariable=id:30013-1,--setvariable=Ksztalt:kwadrat_-_prostokat,--setvariable=Szerokosc_cm:4.5,--setvariable=Wysokosc_cm:4.5,--setvariable=Podloze:Papier_Samoprzylepny_Polblysk_(PP),--setvariable=Zadruk:Druk_cyfrowy_Kolor,--setvariable=Klej:Trwaly_(T),--setvariable=Uszlachetnienie:Nie,--setvariable=Wykonczenie:Ciecie_na_sztuki,--setvariable=Ilosc_wzorow:4,--setvariable=Termin_Realizacji:Standard,--setvariable=Naklad:15
  • dla stringa :
Error: Command failed: C:/Program Files/callas pdfToolbox Server 13/cli/pdftoolbox '--setvariable=nazwa_produktu:Etykiety_samoprzylepne', '--setvariable=id:30013-1', '--setvariable=Ksztalt:kwadrat_-_prostokat', '--setvariable=Szerokosc_cm:4.5', '--setvariable=Wysokosc_cm:4.5', '--setvariable=Podloze:Papier_Samoprzylepny_Polblysk_(PP)', '--setvariable=Zadruk:Druk_cyfrowy_Kolor', '--setvariable=Klej:Trwaly_(T)', '--setvariable=Uszlachetnienie:Nie', '--setvariable=Wykonczenie:Ciecie_na_sztuki', '--setvariable=Ilosc_wzorow:4', '--setvariable=Termin_Realizacji:Standard', '--setvariable=Naklad:15'

Dla przykładu poniższa metoda działa bez zarzutu:

const merge = execFile (
    'C:/Program Files/callas pdfToolbox Server 13/cli/pdftoolbox', 
    ['--mergepdf', 
    `E:/Dropbox/backup_iware/${IdOrder}/${IdOrder + "-" + jobID}/`, 
    `-o=E:/CALLAS/MERGE_OUT/${IdOrder}/${IdOrder + "-" + jobID}.pdf`], 
    (error, stdout, stderr) => {
    if (error) {
        throw error;
        }
    console.log(stdout);
    }
)

Ma ktoś pomysł co robię nie tak?

1

Jeśli przekazujesz parametry w taki sposób

const params = ['...', '...'];

const jobForCallas = execFile (
  '...', 
  [params], 
  (error, stdout, stderr) => {
    // ...   
  }
)

to funkcja execFile nie dostaje tablicy stringów ['...', '...'], tylko tablicę w tablicy [['...', '...']]

Musisz pominąć [] podczas przekazywania

const jobForCallas = execFile (
  '...', 
  params, // <-- w tym miejscu
  (error, stdout, stderr) => {
    // ...   
  }
)
0
Xarviel napisał(a):

Musisz pominąć [] podczas przekazywania

const jobForCallas = execFile (
  '...', 
  params, // <-- w tym miejscu
  (error, stdout, stderr) => {
    // ...   
  }
)

próbowałem :

Error: Command failed: C:/Program Files/callas pdfToolbox Server 13/cli/pdftoolbox --setvariable=nazwa_produktu:Etykiety_samoprzylepne --setvariable=id:30013-1 --setvariable=Ksztalt:kwadrat_-_prostokat --setvariable=Szerokosc_cm:4.5 --setvariable=Wysokosc_cm:4.5 --setvariable=Podloze:Papier_Samoprzylepny_Polblysk_(PP) --setvariable=Zadruk:Druk_cyfrowy_Kolor --setvariable=Klej:Trwaly_(T) --setvariable=Uszlachetnienie:Nie --setvariable=Wykonczenie:Ciecie_na_sztuki --setvariable=Ilosc_wzorow:4 --setvariable=Termin_Realizacji:Standard --setvariable=Naklad:15
2

Ten mój zapis

Xarviel napisał(a):
const jobForCallas = execFile (
  '...', 
  params, // <-- w tym miejscu
  (error, stdout, stderr) => {
    // ...   
  }
)

odpowiada teoretycznie tej działającej wersji, bo tablica jest prawidłowo przekazywana w formie zmiennej

Bart Eagle napisał(a):
const merge = execFile (
    'C:/Program Files/callas pdfToolbox Server 13/cli/pdftoolbox', 
    ['--mergepdf', 
    `E:/Dropbox/backup_iware/${IdOrder}/${IdOrder + "-" + jobID}/`, 
    `-o=E:/CALLAS/MERGE_OUT/${IdOrder}/${IdOrder + "-" + jobID}.pdf`], 
    (error, stdout, stderr) => {
    if (error) {
        throw error;
        }
    console.log(stdout);
    }
)

więc zgaduje, że w takim razie przekazane parametry są nieprawidłowe.

Podaj w zmiennej params coś innego, np to z tego przykładu wyżej

const params = [
  '--mergepdf', 
  `E:/Dropbox/backup_iware/${IdOrder}/${IdOrder + "-" + jobID}/`, 
  `-o=E:/CALLAS/MERGE_OUT/${IdOrder}/${IdOrder + "-" + jobID}.pdf`
];

i jeśli zadziała to musisz szukać problemu w podanych parametrach.

1
Xarviel napisał(a):

Podaj w zmiennej params coś innego, np to z tego przykładu wyżej

const params = [
  '--mergepdf', 
  `E:/Dropbox/backup_iware/${IdOrder}/${IdOrder + "-" + jobID}/`, 
  `-o=E:/CALLAS/MERGE_OUT/${IdOrder}/${IdOrder + "-" + jobID}.pdf`
];

i jeśli zadziała to musisz szukać problemu w podanych parametrach.

Faktycznie, teraz działa. Byłem przekonany, że to błąd po stronie składni, a nie z argumentami. Przyjże się temu. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1