Если вы хотите пойти по пути subprocess.call()
, это должно выглядеть так, как в Windows:
import subprocess
subprocess.call(('cmd', '/C', 'start', '', FILE_NAME))
Вы не можете просто использовать:
subprocess.call(('start', FILE_NAME))
, потому что start
не является исполняемым файлом , а является командой программы cmd.exe
. Это работает:
subprocess.call(('cmd', '/C', 'start', FILE_NAME))
, но только в том случае, если в FILE_NAME нет пробелов.
Хотя метод subprocess.call
правильно задает параметры, команда start
имеет довольно странную синтаксис, где:
start notes.txt
делает что-то еще:
start "notes.txt"
В первой цитируемой строке следует указать заголовок окна. Чтобы заставить его работать с пробелами, мы должны сделать:
start "" "my notes.txt"
, что и делает код сверху.
wp_tickets
, где used = 0
и lottery_id = $postID
, которая возвращает одно случайное число из доступных номеров билетов.
Вторая функция отвечает за обновление таблицы wp_tickets
номером билета, сгенерированным из функции get_available_numbers
.
Обе эти функции затем выполняются на крючке woocommerce_order_status_processing
, когда клиент делает заказ, и выполняются для каждого предмета, найденного в его корзине.
Пока что, когда я проверил это, это похоже на работу. Однако трудно сказать, как это происходит с несколькими заказчиками одновременно.
function get_available_numbers($postID) {
global $wpdb;
$result = $wpdb->get_results(
"
SELECT ticket_number
FROM wp_tickets
WHERE lottery_id = ".$postID." AND used = 0
ORDER BY RAND()
LIMIT 1
"
);
return $result[0]->ticket_number;
}
function add_ticket_number($postID, $order_id, $number, $user_id) {
global $wpdb;
$wpdb->query(
"
UPDATE wp_tickets
SET used = 1, order_id = ".$order_id.", user_id = ".$user_id."
WHERE ticket_number= ".$number." AND lottery_id = ".$postID." AND used = 0
"
);
}
for ( $i = 0; $i < $item_meta['_qty'][0]; $i++ ) {
$number = $this->get_available_numbers($product_id);
$this->add_ticket_number($product_id, $order_id, $number, $order->get_user_id());
}
ОБНОВЛЕНИЕ
Мне действительно удалось сократить это до одной функции, установив used=1
в столбце lottery_id
и упорядочив обновление в быть случайным и ограниченным одним.
function add_ticket_number($postID, $order_id, $user_id) {
global $wpdb;
$wpdb->query(
"
UPDATE wp_tickets
SET used = 1, order_id = ".$order_id.", user_id = ".$user_id."
WHERE lottery_id = ".$postID." AND used = 0
ORDER BY RAND()
LIMIT 1
"
);
}