Tablica argumentów w execFile

Tablica argumentów w execFile
Bart Eagle
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:35
0

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

Kopiuj
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 :

Kopiuj
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

Kopiuj
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
Kopiuj
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 :
Kopiuj
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:

Kopiuj
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?

edytowany 1x, ostatnio: Riddle
Xarviel
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 11 godzin
  • Postów:847
1

Jeśli przekazujesz parametry w taki sposób

Kopiuj
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

Kopiuj
const jobForCallas = execFile (
  '...', 
  params, // <-- w tym miejscu
  (error, stdout, stderr) => {
    // ...   
  }
)
edytowany 1x, ostatnio: Xarviel
Bart Eagle
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:35
0
Xarviel napisał(a):

Musisz pominąć [] podczas przekazywania

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

próbowałem :

Kopiuj
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
Xarviel
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 11 godzin
  • Postów:847
2

Ten mój zapis

Xarviel napisał(a):
Kopiuj
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):
Kopiuj
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

Kopiuj
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.

edytowany 1x, ostatnio: Xarviel
Bart Eagle
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:35
1
Xarviel napisał(a):

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

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.